Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dTJzX-00046w-Tb for pgadmin-hackers@arkaria.postgresql.org; Fri, 07 Jul 2017 03:31:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dTJzW-0001SD-6g for pgadmin-hackers@arkaria.postgresql.org; Fri, 07 Jul 2017 03:31:38 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1dTJzU-0001S2-Vn for pgadmin-hackers@lists.postgresql.org; Fri, 07 Jul 2017 03:31:37 +0000 Received: from mail-it0-x235.google.com ([2607:f8b0:4001:c0b::235]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1dTJzN-00053k-52 for pgadmin-hackers@postgresql.org; Fri, 07 Jul 2017 03:31:35 +0000 Received: by mail-it0-x235.google.com with SMTP id m84so23533663ita.0 for ; Thu, 06 Jul 2017 20:31:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=C2OF6qkxCsWDZ0n/jml6FZy1T3YFYNQjfdvyLJ98m/o=; b=hkryKLc963vkmOhFJn2dt5XFMlsCbHbaMY6M37N6eFowW+R8vL1/OwVjTpjvY8mhqi 3WgbzPsiT1ssd28ibS8/0wd6S0xbkeyBSlPrJ7KgP+DlO3L3RfFw8cC7BV+StpyHlYBm aYLJQNYVxIrJXpge9QXhFJrWlY35oC+Qu8Ap5dQVtfBisQqHMRf9wKXmygTYesRDIfx/ KXIfl/QKSZCLJTAxU33ibeFfgcHrx74qukz5RJbxUXOO32rLk3p623PCPpNev/xPQHiW F2ZH5MOj51BNElolOxoDDaNZLedqYg8efLIBgIEvxJUqSFvReyW15Ul409RMBNkCeZ5Y i7Jw== 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=C2OF6qkxCsWDZ0n/jml6FZy1T3YFYNQjfdvyLJ98m/o=; b=RvFXrPgGQEpfuuDLA8wi42JVZF0C+HUKH4F1WUiuksimhF4rF57ZKNLr6MJ22lM8Mx xMJnIlRFCxqTthE9uj7oTXiMOri2pWmlua6S3VOvwUAyljulTvCtKN8paFcE54Nk7DAM 6bcI5LI1oqUM+XUYFOpFDUFUybLDSVWvB9a9HlWoBJmlyoTbGhDuJeeKc+HYaT4YXGG2 vqQS6zTeBQgKv6j6DwwiV1Sv4iV25oGDV8PhN1CKvFFUB3mR3TMQ6+oQjl+aPUnNFPjT S1e9IZImgrFHuvbZv6Ofw2IPA3hMmkVivOkzNh6SqJ3uDFoO1tn+9xpH/dh3kNyZzVz2 wo7Q== X-Gm-Message-State: AKS2vOzwRLz1P4xlO4whR13rxUQxEX+zkCRK/a8TusjX00gvIHZF4/Lf Bsbr3Yhf99UssGNV+Ahr/fUckYBi/B0/ X-Received: by 10.107.6.23 with SMTP id 23mr58142248iog.122.1499398287879; Thu, 06 Jul 2017 20:31:27 -0700 (PDT) MIME-Version: 1.0 Received: by 10.107.19.40 with HTTP; Thu, 6 Jul 2017 20:31:06 -0700 (PDT) In-Reply-To: References: From: Ashesh Vashi Date: Fri, 7 Jul 2017 09:01:06 +0530 Message-ID: Subject: Re: [pgadmin-hackers] Declarative partitioning in pgAdmin4 To: Akshay Joshi Cc: Harshal Dhumal , pgadmin-hackers , Dave Page , Robert Eckhardt , Shirley Wang Content-Type: multipart/mixed; boundary="001a113f8e7e5413490553b1de29" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Unsubscribe: , List-Archive: Precedence: bulk --001a113f8e7e5413490553b1de29 Content-Type: multipart/related; boundary="001a113f8e7e5413480553b1de28" --001a113f8e7e5413480553b1de28 Content-Type: multipart/alternative; boundary="001a113f8e7e5413440553b1de27" --001a113f8e7e5413440553b1de27 Content-Type: text/plain; charset="UTF-8" Hi Akshay, Please find the updated patch with the refresh logic. Please create redmine cases for the following todos: - PostgreSQL allows to create partioned table using 'OF TYPE'. - We should add collation, and opclass for 'partition by statement. - Allow to attach/create/detach partitions on the partition table directly, open the subcontrol in dialog for the same. (We support detaching an individual partitions, not the bulk operation.) Please review it, and commit it (if possible). -- Thanks & Regards, Ashesh Vashi EnterpriseDB INDIA: Enterprise PostgreSQL Company *http://www.linkedin.com/in/asheshvashi* On Tue, Jul 4, 2017 at 5:42 PM, Akshay Joshi wrote: > > > On Tue, Jul 4, 2017 at 3:59 PM, Ashesh Vashi < > ashesh.vashi@enterprisedb.com> wrote: > >> On Mon, Jul 3, 2017 at 3:14 PM, Akshay Joshi < >> akshay.joshi@enterprisedb.com> wrote: >> >>> Hi Ashesh >>> >>> On Fri, Jun 30, 2017 at 12:46 PM, Ashesh Vashi < >>> ashesh.vashi@enterprisedb.com> wrote: >>> >>>> On Thu, Jun 29, 2017 at 5:02 PM, Ashesh Vashi < >>>> ashesh.vashi@enterprisedb.com> wrote: >>>> >>>>> Hi Harshal, >>>>> >>>>> These are initial review comments. >>>>> 1. >>>>> Please share a separate patch for generic code changes from this patch >>>>> for the following files: >>>>> - web/pgadmin/tools/user_management/templates/user_management/ >>>>> js/user_management.js >>>>> - web/pgadmin/static/js/backform.pgadmin.js >>>>> - web/pgadmin/static/js/backgrid.pgadmin.js >>>>> >>>>> This should be committed as separate functionality, and should not be >>>>> part of this commit. >>>>> >>>> >>> Committed. >>> >>>> >>>>> 2. >>>>> Please put a space after a colon (:) in javascript object definition. >>>>> i.e. >>>>> {cell: Backgrid.Extension.StringDepCell, cellHeaderClasses: >>>>> 'width_percent_30'} >>>>> >>>>> 3. >>>>> Conversion of ptid (partition table OID) to tid (table OID) for its >>>>> children must not be in 'web/pgadmin/browser/utils.py' file. >>>>> Please create a inherited class of PGChildNodeView, and extend the >>>>> functionality in it, and use it as the base class for all children of table. >>>>> >>>>> I will keep you posted for further review comments. >>>>> >>>> 4. >>>> URL definition of the javascript for tables & partition tables utility >>>> must be exposed from the table/partition table module, and not from the >>>> database module. >>>> i.e. >>>> No changes should be done in the database module for this feature. >>>> Hence - I don't expect any change in the file: >>>> web/pgadmin/browser/server_groups/servers/databases/__init__.py >>>> >>> >>> Fixed. >>> >>> Apart from above this patch contains test cases as well. >>> >> One bug: >> If I rename the partitioned table from the properties dialog, and attach >> a partition at the same time, then - it generates wrong modified queries. >> > > Fixed. Attached is the latest patch > >> >> -- Thanks, Ashesh >> >>> >>>> -- Thanks, Ashesh >>>> >>>>> >>>>> >>>>> -- >>>>> >>>>> Thanks & Regards, >>>>> >>>>> Ashesh Vashi >>>>> EnterpriseDB INDIA: Enterprise PostgreSQL Company >>>>> >>>>> >>>>> >>>>> *http://www.linkedin.com/in/asheshvashi* >>>>> >>>>> >>>>> On Fri, Jun 23, 2017 at 6:55 PM, Harshal Dhumal < >>>>> harshal.dhumal@enterprisedb.com> wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> Please find attached patch for partition support. >>>>>> >>>>>> This patch includes all the work done by Akashy and support for child >>>>>> nodes (constraints, rules, index, triggers and partition itself ) under >>>>>> partition node. >>>>>> >>>>>> >>>>>> Thanks, >>>>>> >>>>>> -- >>>>>> *Harshal Dhumal* >>>>>> *Sr. Software Engineer* >>>>>> >>>>>> EnterpriseDB India: http://www.enterprisedb.com >>>>>> The Enterprise PostgreSQL Company >>>>>> >>>>>> On Tue, Jun 20, 2017 at 12:16 AM, Shirley Wang >>>>>> wrote: >>>>>> >>>>>>> >>>>>>> >>>>>>> On Mon, Jun 19, 2017 at 1:59 AM Akshay Joshi < >>>>>>> akshay.joshi@enterprisedb.com> wrote: >>>>>>> >>>>>>>> On Fri, Jun 16, 2017 at 11:16 PM, Shirley Wang >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Looks good. I noticed people clicking back and forth to the >>>>>>>>> columns tab to remember which columns they've created while filling out the >>>>>>>>> Expressions column. It might be better to have a list of the columns and >>>>>>>>> the datatype above the 'Partition Keys' subnode and have columns as a type >>>>>>>>> field rather than a drop down. >>>>>>>>> >>>>>>>> >>>>>>>> I think we should not duplicate that data as we already have all >>>>>>>> the information on "Columns" tab and by providing drop down user can select >>>>>>>> columns from there only. >>>>>>>> >>>>>>>>> >>>>>>>>> Also, I think the fields someone sees after selecting the Key type >>>>>>>>> needs to depend on what they select. Seeing both Column and Expressions >>>>>>>>> type field might lead someone to think they need to fill out both fields. >>>>>>>>> >>>>>>>> >>>>>>>> We can't, because user can select one column and provide an >>>>>>>> expression as partition key in this case we will have to show both the >>>>>>>> columns in subnode control. Anyways when user select columns I have >>>>>>>> disabled the expression cell and if user selects expression column cell is >>>>>>>> disabled. >>>>>>>> >>>>>>> >>>>>>> Ah I see what you mean. What I meant was that the column would >>>>>>> change depending on if someone selects Column or Expressions from the >>>>>>> dropdown >>>>>>> [image: expression.png] >>>>>>> Can a user select more than one key type? The use case I can see >>>>>>> where hiding 'Columns' or 'Expressions' would fail is if someone can create >>>>>>> an expression key type and a column key type. >>>>>>> >>>>>>> Disabling a feature is one way to guide user behavior, but it >>>>>>> doesn't provide enough context for someone to understand why it's disabled. >>>>>>> It's better to only display what is absolutely necessary and hide fields >>>>>>> that are unrelated to the workflow. >>>>>>> >>>>>>> Typically, disabling a UI element is useful when that disabled UI >>>>>>> element also provides some context or value while disabled. In this case, >>>>>>> I'm not sure it is. >>>>>>> >>>>>>> If hiding options isn't possible, providing some text in the fields >>>>>>> (like N/A or --) would be helpful. >>>>>>> >>>>>>> >>>>>>> >>>>>>>> >>>>>>>>> [image: coluns_partitioning.png] >>>>>>>>> When is the 'In' column in the Partitions subnode enabled? >>>>>>>>> >>>>>>>> >>>>>>>> In case of 'List' Partition. >>>>>>>> >>>>>>> >>>>>>> It would improve the experience if the 'In' column was removed when >>>>>>> a user selects 'Range' partitions then. And then if a user is creating a >>>>>>> 'List' partition, 'From/To' should be hidden. In this case, 'From/To' and >>>>>>> 'In' are dependent on that first drop down step, so seeing 'In' while on >>>>>>> 'Range partitions' (and 'From/To' on 'List partitions') is not providing >>>>>>> any value. >>>>>>> >>>>>>> >>>>>>>> >>>>>>>>> For the NoteControl on the bottom, what do 'Mode Control' or >>>>>>>>> 'Attach Mode' refer to? And how can I tell the difference between 'Create >>>>>>>>> Mode' and 'Edit Mode'? >>>>>>>>> >>>>>>>> >>>>>>>> 'Mode control' is a switch control in subnode control that >>>>>>>> should be "Mode switch control". 'Create Mode' is when user creates the new >>>>>>>> table by clicking create-> table and 'Edit Mode' is when user open the >>>>>>>> properties dialog for the existing table. In case of 'Edit Mode' there are >>>>>>>> two ways user can create/attach partitions. In Attach mode we will identify >>>>>>>> and list down the suitable tables to be attached. >>>>>>>> >>>>>>> >>>>>>> I see. Describing these various states is great in case a user needs >>>>>>> it. What are your thoughts on having it live in the documentation of >>>>>>> pgAdmin4 rather than in the dialog? This seems to be the established >>>>>>> pattern for all other explanations. >>>>>>> >>>>>>>> >>>>>> >>>>> >>>> >>> >>> >>> -- >>> *Akshay Joshi* >>> *Principal Software Engineer * >>> >>> >>> >>> *Phone: +91 20-3058-9517Mobile: +91 976-788-8246* >>> >> >> > > > -- > *Akshay Joshi* > *Principal Software Engineer * > > > > *Phone: +91 20-3058-9517Mobile: +91 976-788-8246* > --001a113f8e7e5413440553b1de27 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Akshay,

Please find the updated patc= h with the refresh logic.

Please create redmine ca= ses for the following todos:
- P= ostgreSQL allows to create partioned table using 'OF TYPE'.<= /div>
- We should add collation, and o= pclass for 'partition by statement.
- Allow to attach/create/detach partitions on the partition = table directly, open the subcontrol in dialog for the same. (We support det= aching an individual partitions, not the bulk operation.)

Please review it= , and commit it (if possible).

--

Thanks & Regards,
=
Ashesh Va= shi
EnterpriseDB INDIA: Enterprise PostgreSQL Company

<= br>

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


On Tue, Jul 4, 2017 at 5:42 PM, Akshay Joshi= <akshay.joshi@enterprisedb.com> wrote:

<= br>
On Tue, Jul 4, 2017 at= 3:59 PM, Ashesh Vashi <ashesh.vashi@enterprisedb.com= > wrote:
On Mon, Jul 3, 2017 at 3:14 PM, Akshay Joshi <akshay.joshi@enterprisedb.com> wrote:
Hi Ashesh
<= br>
On Fri, Jun 30, 2017 at 12:46 PM, Ashes= h Vashi <ashesh.vashi@enterprisedb.com> wro= te:
On Thu, Jun 29, 2017 at 5:02 PM, As= hesh Vashi <ashesh.vashi@enterprisedb.com> = wrote:
Hi Harshal,

These are initial review comments.
1.
Please share a separate patch for generic code changes from= this patch for the following files:
- web/pgadmin/tools/user_man= agement/templates/user_management/js/user_management.js
- web/pgadmin/static/js/backform.pgadmin.js
- web/pgadmin/s= tatic/js/backgrid.pgadmin.js

This should be c= ommitted as separate functionality, and should not be part of this commit.<= /div>

=C2=A0 =C2=A0 =C2=A0 Committed.=C2=A0

2.
Please put a space after a = colon (:) in javascript object definition.
i.e.
{cell: Backgrid.Extension.StringDepCell, cellHeaderClasses: = 9;width_percent_30'}

3.
Conve= rsion of ptid (partition table OID) to tid (table OID) for its children mus= t not be in 'web/pgadmin/browser/utils.py' =C2=A0file.
Pl= ease create a inherited class of PGChildNodeView, and extend the functional= ity in it, and use it as the base class for all children of table.

I will keep you posted for further review comments.=C2=A0<= /div>
4.
URL definition of the javascript for tables= & partition tables utility must be exposed from the table/partition ta= ble module, and not from the database module.
i.e.
No c= hanges should be done in the database module for this feature. Hence - I do= n't expect any change in the file:
web/pgadmin/browser/server= _groups/servers/databases/__init__.py

=C2=A0 =C2=A0 Fixed.

=C2=A0 =C2=A0Apart from above this patch contains test cases as well= .
One bug:
I= f I rename the partitioned table from the properties dialog, and attach a p= artition at the same time, then - it generates wrong modified queries.

=C2=A0 =C2= =A0Fixed. Attached is the latest patch=C2=A0

-- Thanks, Ashesh=C2=A0
<= div>
=

-- Thanks, Ashesh
<= blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l= eft:1px solid rgb(204,204,204);padding-left:1ex">

=

--

Thanks & Regards,

Ashesh Vashi
EnterpriseDB INDIA: Enterprise PostgreSQL Company


http://www.linkedin.com/in/asheshvashi


On Fri, Jun 23, 2017 at 6:55 PM, Harshal Dhu= mal <harshal.dhumal@enterprisedb.com> wro= te:
H= i,

Please find attached patch for partition support.

This patch includes all the work done by Akashy and s= upport for child nodes (constraints, rules, index, triggers and partition i= tself ) under partition node.


Thank= s,
<= br clear=3D"all">
<= div dir=3D"ltr">
--=C2=A0
Harshal Dhumal
Sr. Software Engineer
=

EnterpriseDB India:=C2=A0htt= p://www.enterprisedb.com
The Ent= erprise PostgreSQL Company

On Tue, Jun 20, 2017 at 12:16 AM, Shirley Wa= ng <swang@pivotal.io> wrote:


On Mon, Jun 19, 2017 at 1:59 AM Akshay Joshi <akshay.joshi@= enterprisedb.com> wrote:
On Fri, Jun 16, 2017 at 11:16 PM, Shirley Wang <swang@pi= votal.io> wrote:
Looks good. I noticed people clicking back and = forth to the columns tab to remember which columns they've created whil= e filling out the Expressions column. It might be better to have a list of = the columns and the datatype above the 'Partition Keys' subnode and= have columns as a type field rather than a drop down.

=
=C2=A0 =C2=A0I think we should not duplicat= e that data as we already have all the information on "Columns" t= ab and by providing drop down user can select columns from there only.=C2= =A0

Also, I think the fields someone sees af= ter selecting the Key type needs to depend on what they select. Seeing both= Column and Expressions type field might lead someone to think they need to= fill out both fields.

<= /div>
=C2=A0 =C2=A0We can't, because user can select one column and pro= vide an expression as partition key in this case we will have to show both = the columns in subnode control. Anyways when user select columns I have dis= abled the expression cell and if user selects expression column cell is dis= abled. =C2=A0

Ah I see what you mean. What I meant was that the column would change dep= ending on if someone selects Column or Expressions from the dropdown
<= div>3D"expression.png"
Can a user select more than one key= type? The use case I can see where hiding 'Columns' or 'Expres= sions' would fail is if someone can create an expression key type and a= column key type.

Disabling a feature is one way t= o guide user behavior, but it doesn't provide enough context for someon= e to understand why it's disabled. It's better to only display what= is absolutely necessary and hide fields that are unrelated to the workflow= .=C2=A0

Typically, disabling a UI element is usefu= l when that disabled UI element also provides some context or value while d= isabled. In this case, I'm not sure it is.

If = hiding options isn't possible, providing some text in the fields (like = N/A or --) would be helpful.

=C2=A0

3D"coluns_partitioning.png"
When is the 'In' column in the Partitions subnode e= nabled?=C2=A0

=C2= =A0 =C2=A0 In case of 'List' Partition.=C2=A0

It would improve the experience i= f the 'In' column was removed when a user selects 'Range' p= artitions then. And then if a user is creating a 'List' partition, = 'From/To' should be hidden. In this case, 'From/To' and = 9;In' are dependent on that first drop down step, so seeing 'In'= ; while on 'Range partitions' (and 'From/To' on 'List p= artitions') is not providing any value.
=C2=A0

For the NoteControl= on the bottom, what do 'Mode Control' or 'Attach Mode' ref= er to? And how can I tell the difference between 'Create Mode' and = 'Edit Mode'?

<= div>=C2=A0 =C2=A0'Mode control' is a switch control in subnode cont= rol that should be "Mode switch control". 'Create Mode' i= s when user creates the new table by clicking create-> table and 'Ed= it Mode' is when user open the properties dialog for the existing table= . In case of 'Edit Mode' there are two ways user can create/attach = partitions. In Attach mode we will identify and list down the suitable tabl= es to be attached.=C2=A0

I see. Describing these various states is great in case a user= needs it. What are your thoughts on having it live in the documentation of= pgAdmin4 rather than in the dialog? This seems to be the established patte= rn for all other explanations.






-= -
Akshay Josh= i
Principal Software Engineer=C2=A0


Phone: +91 20-3058-9517
Mobile: +91 = 976-788-8246




--
Akshay Joshi
Principal Software= Engineer=C2=A0

=
Phone: +91 20-3058-9517
Mobile: +91 976-788-8246

--001a113f8e7e5413440553b1de27-- --001a113f8e7e5413480553b1de28 Content-Type: image/png; name="coluns_partitioning.png" Content-Disposition: inline; filename="coluns_partitioning.png" Content-Transfer-Encoding: base64 Content-ID: <15cb1f7bd866477d6182> X-Attachment-Id: 15cb1f7bd866477d6182 iVBORw0KGgoAAAANSUhEUgAAA4QAAALvCAYAAAA9CgsWAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA AXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAATnbSURBVHgB7L13cBzH/aetqqururqru3PV3f11 VVeuu7eu3tc/B9lUlizJClawomVZwYpWtGQr50BSgRIVSWVSpERSmRLFIOYIkmACE8CcAeYcQYKZ 7Hc+DXyXjeEusFgugF3M81Q9BezO7ITdntn+TPf0nrRixQqHiIiIiIiIyfOkYtpYREREREREzJ8E QkRERERExIRKIEREREREREyoxwXCXz41BBEREREREduYBEJERERERMSESiBERERERERMqARCRERE RETEBPqrpwYTCBEREREREZPor5/6iUCIiIiIiIhYCF7asb974f2v3Uc9ernPP/88J/VaLUPLanh9 g91v8hEIf/HsSPd/PljjftFjs/vlpxvdr3tsdL/tscG167nenfrZMU+LPCV67jc91rv/t9vG6DWr /WsL9cNARERERERsKe95s2/OITCTd73Rt4F1DnYn5yMQ/n8Kdd3WuadKD7pXp+13Xabvdr1mbXMD 525yo+ZvcGMXyvVuzIL1bkD5Ovf2+PXur/02ut90W+P+jUCIiIiIiIgJV615CnC9evVyJSUlbvHi xTn/hqBeq2VoWVpm5pbCwe63Tw3KTyD8Vbf1rkPZEff6zCPupWkH3QuT97unJtS4h8bsdvcM3+X+ Nmi7u/bHre6Sbza7s3pvcr+MWhP/H1oIERERERER3Qvvf+XDm4JcrkEwrpalZWrZ6debx0D46ygQ vlJ2yL0764B7vWyf6zB5r3tq/B73r9HV7q5hO91NA7e5a36IAuG3m925X2xyv+m5yXcZ/f8IhIiI iIiImHDtnsETaRlM11Jo9xSmX28eA+Fvu69131ZscxVLV7m5S6vcnKUr3dxlq9wc72o3Z/ma6G/k irVu+tIoPI7b6H758RoCISIiIiIiJl675y9fYdC05aZfbx4D4WndV7nJ81e6qsoVrqqqMvpb6ZYt W+pWVlW5VStXusro+XVr17oN69e7TRs3uhnLN7nTP13j/t9nCISIiIiIiJhsiz8QfrrKTVtQ6Sqj eSujMLhkyRI3YsQIt3z5cv/6MWPG+L9rfShc5+at2uzO6NH0QPh83wpXvnK721K9363bvtf9OH21 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 tnbWDRKj8KjpGjjGumtqlNHfvzTKD04TsmLTbh9GT6QAWADcHLVk6rFGObUBbYS6xFpYva9nWWow HLV8Gmq91M9K6PXrttdO71Q3yui3UUtiOMqowuD9n/HzE4iIiIiIhWA29xAuXbrUdx0Nn9NP/ekn /lr1HsKW9uq3x/v75NSN8qyO2QVK/YyDul4qBMV/h/D6rqV+cJXwd/5C9fuDV0dh9KwOx153Seex fv0a4KW59vPM9iPdfdH23tltaoPz6XcI0+1X3HOjMKv9vOvTqc22zYiIiIiI2HSzCYS52CYDISIi IiIiYluSQIiIiIiIiJhQP+rRywc3dQHNVxjUsrRMLTv9egmEiIiIiIiIre4L73/lw1tJSUneAqGW pWVq2enXSyBERERERERsdS/t2N+Ht169evkgdyIthXqtlqFlaZladvr1EggRERERERELwnve/C51 z1++vLNz3wbWSSBEREREREQsGNWapy6edk9hLuq1WkbmlkGTQIiIiIiIiJhQCYSIiIiIiIgJlUCI iIiIiIiYUAmEiIiIiIiICbUJgbBv376IiIiIiIjYRvzuu+/ct99+SyBERERERERMmk0KhKtXr0ZE RERERMQ24qpVqzL+uD2BEBERERERsQ1LIEREREREREyoBEJERERERMSESiBExKJz48aNbu/eve7w 4cOuraJ90z5qX4vps0FERMTikkCIiEXljh07XNLQPhfTZ4SIiIjFI4EQEYtGtZYdPXrUJQ3tMy2F iIiI2BwSCBGxaKypqXFJRfteTJ8VIiIiFocEQkQsGtvyPYONoX0vps8KERERi0MCISIWjUmnmD4r RERELA4JhIhYNCadYvqsEBERsTgkECJi0Zh0iumzQkRExOKQQIiIRWPSKabPChEREYtDAiEiFo1J p5g+K0RERCwO8x4If5q80D3y+RR3Q5fx7rYPJ7hX+k535YsKJ0wuXbHSvfL9DDdh9tK8Lre0Ypl7 /usyd/N7490tH0xwL35T5srmLc/qtdqWV76f7pZXrmyWfW4tfyxdkCoLf/94onuz/0y3eHnz7uPK qEBXrVyV02tHli12r0ZlY9WqxuetrMptHSdiRXQc6Xj6auzcRucdNm2R6zpodotvY1PV8fhy3xl+ 37KZvzH27NnjnnvuuXo+++yzbuTIkS5XwpFN161b5zp06OAOHTrU6LTmINv39eOh5b6smC9HvjVg lpu3pLLVP/NM6tiVrbkNI6JzwBN9probu453t3840b32wwy3aHlVi26DPrveo+em3pNcz2e5uGBp lesU7fPt0Xf3TdF78GT0XoyZsbjePNqeT6JtvLdbqfvruyXuH59Ocp+NnFPvvKl9eO+nwj//ICJi rXkNhKqAtntuuPtT57E+dOnL5PQXR7hzO450U+cuK4gdnh6FNG3jtyXz8rbMHycucKc8P9xd8Mpo 1/7bMvdCFAzPifb5jGjfx85c0ujruw+v8Nu0aFnLVjyaUwUr7dM1b43z/z/02WT/+Mo3xjZrBUsV uIteHZ1VqIuritDvo8+tsUrpsii4nxp93p9Gn1tz7Uc63+o/y7+HKluNXTzQ+6D3viW3LxfteJxY nt0FmsbYunWrO+mkk9zZZ5/tbrnlFu9vfvMb/1z79u1dU7HlzZ8/3z8ePHiw+y//5b+4/fv3Nzit ucj2fb35vQnurPYjowsxpe7Ojya6v0YXZfQ+6xylSn9rf+7pfKz3FH9BrbXW3z+6gKX36Oo3x/kA bees694padFQpiD6r2jd+r/bsAp3+gsj/IWT5l6v1nFFdH4+s/0I98yX01yHb6f78nJK9B6Mml4b CpdXrXQ3vVdblu7+pLQuPE70j++KypqdO1X+iuH8g4iIteYtEJZGFTqFovujq4VhhXrKnGW+YmJf cKYqJaoMhi0tep0q8pXRl+/0+cvd/KXHX81WZVwtb0tiLU0WAGYvjLa1bpmqNGs5c4Or4nqcz0Co 7Tn3pVHuz2+Pi1q/jlW05iyu9BX3O6LKWDi/WkJmRNsQVjCaEgjtvZ25YIXf13C5ei4MQrYOtQpM j61TLozWp+eX5LnVbnR0RVn783hUwQu3Z1DUeqzn3/hxZr1tnLlg+XEtRI2VBU2bFe2vtP3ScwpC Km+Vdc/Z+2XrsdfPj96TGbF912uW1QWthta/ZEVtIOwyaFa9/bPPtjlaD7U9l7w2xre2qoLWa9Sc 4+ZR+dP6Vf5f75d9IEx3nGRTfux4U7lLF6LL66bFn9dytJ06B8yY3zyB8Lvvvqv3/AMPPOD++3// 7+7gwYP+8dGjR93OnTvdjh076rXo6Xmh5zRty5YtfnnTpk3zz6tF8MCBA/7/hqYZCoeaLx4Sjxw5 4v+qRVPbbI8bI9vyogr5tW/X//z7jp/v32uFDHtuUd05YGHs3JPt+TQsJxWLao8pe+28umMsXm7s 2I33HHms1xQfxrKZ19ah47UiTz1QHv58ir+YtCI4fnuMqD03D526KPWcpqd7z8L3KN13Vybj+6Lz h9ah57tF3w063puyvFwdUBeIFYztubl132O6uKvHOr9qHmvBND8cXO6f/2Dw7FT5IxAiIhaPeQuE ahVTJTldlyRVXrtGlWf9ry+9+7tP8l8e1tqhFjZNU4DQ1dgLo6uSNl1XKm05aiHROmyauiDqeVV+ dXXy5rorl+NnL/VfXKc8d2zeq98cm6rY5jMQ9om+GLU8dZWNT/t+wnz39oDa0DC5Ypmv7Nj2KESq gqb5wkAYr8gvr2uNGjhpoV+H/tcVf1uOuvWoFcAeX965/n7e9fGxec9/eZSveKuCpuDeLnh/9Pnl q1A9/1WZv8q8ONYSuCpSFYavx85LvT96H2wbroo+o0kVyxotC/p8/9jp2PNqgR48ZaF/TbhP2tdb 3p/gnv5iql+OWmznRJXWv3YpqTffS99NrytfM315VLjJtH57X80HekzyoUfbbs9pPV+OmetWr16d N3+qC9Pq0vaXd0vcrR9MqPe+PvfVtNT69d5r26+JAkHJrCXHVeBUJjWPwm5jx0m68qNlqJuzegLY tD9E0/QZaNq0uct8GbZpanWw7tMDonIcfub6fJojEH799df1nv/yyy/df/pP/8nt3bvXLVy40P3f //t//Xzyf/yP/+FGjRrl5zvjjDNcnz593P/6X/8r1bJovvrqq27cuHF+OTNnzsw4TetQsOzYsaP7 9//+3/vp/+7f/Tv34osv+ue1jXr+1ltvTb3+//yf/5PV/mVbXtJVyOdHAVwX7dSVTy09auEJy/K/ ek7256pczqf3dDu2LPUC0LLssVqZJs+pPa7HzFhS79hV10wtR9trz2kb1Ysg07zadp0HtZ2nRa1n 6rKYj2NMx7J6CEyZc6w3i7ajy8BZ/gKfHn8efZedGR3ftk1PRecWC3QKRWrNs2m3RS1ner2OXb13 YYDU/uo9TbcvmqZtsfBl3l533g9vd+gYnbt07OWjq63Ox1p+vKvnF9G57Kfo2Nb3htal7v/x1+oc pIuiOtb1fhAIERGLy7wFQn35qfXCHisMqBJoWmvWs1Gl+uwOI12/KASqMqHuJqqcqrXAKvTvDKj9 AlYFXF+kujr89bh5fpq6pWqadUlUUNKXqf7/8zvj/L0MY+paqNRtVVezFf70+Jvob74DodatbrHL GujCpy9rVZJ09VmV5ilRhflvUUVYFR9d/c4mEGp7LRSoEj0jau3S++RDYVRxU2ur7WePaHm2n1e/ VRsK1HX13I6j/Hs6eMoiP+396ItfV/UVBvU423seG1OVgVuCwJJOtdZpv1TpVAVsSHQF/uLo/VGF wgJZprKge3xUcRs/e4mvHOn9UjDW1XXds6gWQl3RV0ueVTRV0fo+CuAKf2e3rw2QWq5aBSwE6r1X 2Wxw/VE5HhK9f9p23TOqIKPX6bMcXrbIhyGFNYWnXLqtZvLhz6a4y14f47dNn5u2Zdq82oqryry2 tZPKe7Stn9a1Kuh90TboPb2vW22l2Spuj0atMbpI0dhxkq78aBu0zMuj7VFXMu2zQuofXhnlWza0 Xq1jQvTejI6m6yKFyqjKtz6b66N59ZlrmVfVXSTJdyBUqNu9e7errq52CxYscL/61a/cL37xC98S d9VVV7lzzjnHbdiwwW3evNn9/ve/d3fffbd//WmnneZfr/sO586d60pLS/3jgQMH+nmHDRvmQ19N TU3GaQqE3bt399M+/fRTt2vXLtejRw//uGfPnqltbNeunT8BV1ZWup///OfumWeeaXT/mnIMKrQp BFpwsy6Qqvh/NKTcl5FvovOqpquLZLu60JLL+VSfty7m2AUyXSDR568LGAo6CjfqkqhAofOXzjU6 d58XXRzQMajzwW3RcXN55zH+NQpSmea1c6LWo+2O3+OWq/0n1Xb913LVxVZhq9/E+akWTuv50P6b Mn+u0Xvoz7dRK+LI6bXTdFxp2nfRuUbbqPs3LRAuigXCjt+Vpd0XC4RqXVW3zVPqvufKoscKo6/0 nVH3vbLaf6fk62Kezpd2POpC2OO9p7pPotbkuXVhWGXDLiike/1rUbnR9inkEggREYvLvAVCfQGo 5c8eWxcSUxVttUioIv/P6OqxuqcMjL6A+4yprUCoFVGV8LCbk64qW2XxwR6T3YXRl5+6Hep1+qtl qYKqCoy+VO0qrr7Yeo6Y4ytD6spq9zZ+20yBUJXchu4x0fZrnX2CVhpVgPTlqhazpgbCaXXBzbrb /VjXxUfboLCjL2zbT2uFlOq2q4qGVV7UnVXbpFCqisiyPA1qo7Jwb7eGr9q/H5UP7X/Y7bV3XWVy UsXSBsvCc1/VtkarwqYgqffBWhbDUGfbosqqhbNxUbhRi7QuQCg0amAEmz8eCDOt3z6TrnUVo7fr gvnTX0zz3a3UYqgQlY/3Umpb1fKggYpUOZtQV550UUTTH4jCripyYQBVxdTK0btRC4der/KlEKkK po6/bI6TdOVHn4+mfTX22DGkYP5xVEHW39rwMN0fp1LbrXVaBTq8r9bKdL4DYdz/+T//pxs7dqyf R617Op+pS6j+/93vfufuueeeVCC87777jlteWVmZfxyGvoamXXHFFe62226rt2033XSTu/LKK1Ov s66m4v77709tQ74CYXj+NVUuVE50T7c+P5UJnQ/UJTA8BzX1fGo9JKzFS4OK2LZcGYVDhR9rgeoe hQyVC5VBbc+ZdRfUdA+hldmG5l0QbaPWkc9eDabORzpe1OJ5Vvva1j511VYo1cUktf4PrPsOktre O6KLmi/1rb3QFHY31blVLWvZBMJwXywQ6v/udRd37LVP9ant7aBz1PBptRf2xufxXKPt13ex1nNp tN++xfa52vul9d7YhcR0r9X5SPtiF+IIhIiIxWPeAqECwMWdRqcq4roarC8QqXvGVNFWq6G+MORp L9RXwUiV8H/2OHav4fTg/iJ1Uzklzes0fzxEaT2q6Gs9+pL+yzslzRYI1Z1Iy1MoiU9TZUbdnBRA NE8YElQpuyBqUdEV5IYC4bI0gdAqB7YvpXWV6dpljvZBJT5N6v21ioa+4MMurPoCtwrgiWplIV0L ma46K8Sru68qVyuDIF1WN8CI3q+GyoICkrpq6YKAnlMLhN43zZcuEKriZcsZMnVh1NJW29VRFxgu jVq5MgXCTOuPB0JVohROw+6lqmDna8TED4eUp63cqwVFFwFqA3hpvdeE5Uitmjp2Po9ae94dODv1 umyOk3Tlx+4FVTCMb+uouosN8eNU67BureGgJtOb6R7Czp07u/Xr13s1+qfdOyi++uor30XzP//n /+wuvPBC97//9/+uFwi//fbbEw6Ep556qu8yGtKlSxf329/+NnXvobbN+Ne//pX3QKhjUC2x+pz0 OZYHF1/UDfS6us/7/Kjl7fK67r/pzkHZlBP7/OzYCC8k2DGoexfTlQ2p1qcwEH7SwLwVi1ekzon5 OL6kjgcF5MlBd1Edv3pO63oiOm8pkKbbJrWk6v7H695JH4CyCYThvjQUCO1inno4qIeCPsN89UTQ ssP7B6UuHGgd9hnpXKsW0nSv1/ujVly9bwRCRMTiMm+B0L7s1bWz/gpW+1Ckira+dPWFoZHJbLqu KCsMqsUsDCwyrGyoK6C6BYbL1hVYdS+KV2B0hVdfshp6v3Ydq1KVlHwHQutO1fHb6cftt7ZJ3bZO pIXQWoMaCoQTGwiEE9NU6BW8FFY1v34GwncxfP7YPZkn6rt1IdnuDTXV3VMVCl0Nz6aFMFNZ+CFq PRhe99lqX+6ruydVy28sEKrrrrov2v08eu8zdRnNtP54IFQ5s1ZaVboVeDXviLJFJ36Arl6d6hI7 ua5yLy0kqkyrxV1d9MKKoY6XsBzpvlPdN6p9t3smszlO0pWf8XX3JX4XVPrVBVz3pFkL4aBJx+6p VYu2tve7ukFNbMRC2VwthPF7CA11I/2P//E/+sBoPxnx4IMPploFFQjD1zZnC6GCanMGwoYq5Lpo 86foWLDjT5+XjkeFv1zOp/FAGA84OgZt0JJpQdd0XSRTl0uV3TAQppt3XN28y9Ks40RV7xWdB579 atpx07RNKvdq9VYXzfBCj8q9tlWjSytYhy2EahnXexe/h7Aq2letqymB0F5rXb51wUkXFMOW2BNV 26uLbPERTd+r66KubVDLqeaxi4fWZV8tujq3q0tvNuUPERELy7wFQn0R6otKXdNU+VPFWF3D7rEr y3UVbX3h6p5BXXlVBV6tBvqy0ZXIhirhdg9h534z/T0a6tZiXVniFZjOUYuk1qkv6rJ5y1IDHOh+ sHwHQnlP3eAM6jakgKIK+z/qBm3pNWqu329V2K3Lq67W6965U9PcQ6iRK0+pC1O6uv+3ukE38hkI 7T6fj+o+Jy3bB5y6gX9OVN3/o/sB1ZVWn48+L3XPVBdMrUefdXgPYWn0fmnfVNnS+9RYINOAF7qf ThcD1DKrVkdVZhdGLU9qjVbLo650W+tZGAjV/UvhSstTdy4tR6+tiIXJBgNhdBFD5VytAvq81YVV FbwBkxb4Cnanuvtbsw05DWn3LcV/4kKVYm2rjq8v6rpdK2hr/eE9hDa/hW1pg1Jkc5ykKz+qPP8x eh81qIwuiKhSr2Nf9xvWlvVxXgU/fda6D0ytVSq3GgDo2rrBbsY04z2EmQKhuolqeqdOnfy9ffqp iP/6X/+ru/zyy/39hfFAqPk1AMxnn33mtm/fXi/0NTTN7hns1q2bn8/uKezdu3dBBELdu637QHXs afAWa/UbF30muZxPswmEKrO6IKiLEppfZcAudmg+tfrrvKFzhUJJpnmXN0MglAoz9h2j+2J1bNv9 lOoWPqruWNR26vylC1PqwqqukgPrzs2PReei1PdT3f12+h7UNN1Hqe+85+vu2c4mEGoQG82rez2t S/9HQ2svBukctDCPP1WkVkct92/R+nVu1bYq6Okz0bGuY1uhXNur41bfUfpszqnrqaHtsfvQtQ86 12q/Qu1CHiIiFpZ5/R1CdQXTvX5htzZVBHXPibXCaJh/XZ226QqHuuqr1+uLNvx5inhlQ1+o4Sij 1i1PX9oaOTL1uuhLKRydTl9Oqvj7+y1m1345D4h1jTkR9UWt7jLhKHyqrCsY2zwKd39+59jolqrs 9KtrQVMgtHsvNMCDWrFsPg20YFfjdYXeRuDT6+yejrDLqEKnKiGz6qaFXaBUodfno6AUjgIo1YKU z5+fUIXKRik0dU/KoGA0Vu2/Bl+x6arw2Qh/DZUFBZrL6z5PXxGJKmUf1b3Xeo9sFEDNp89e3XJt ORaWNF3vq70PamVTObLBYBori3YRQPfv6XPQoCrtguVaK9yJqpaHdCO2SpV/lQf9hIYqpbZfulKv MhTeA6kyqmMwvJ+yoeOktK5lOl350f+qGNo9RlKvsy7RuiByVdAdWeeAkWWLU59P2LVW25PPQKif kvgP/+E/uEGDBmWcRwPG2L2FGsxFLXcKdgqCCoQDBgxIzatRQa+99lo/7yuvvOJD33/7b//N/4xE Y9Nefvllvy2aruXrsZ63IKlBbcJAeO+997p8BUIdz+EgX3E1WMrpwWiZD0YBRGVJZaYp59N4OdHF El2QCbuM6qJWx7rjQQMv6cKPLUvd1u21Cj0KFf7iThR0Ms1rIerHPJ7Dpc6/1i20XXAs6UKLtQqq J0w4yui93SelWtTsXl2bpkF8dK7V8RaO6qwgrvdP54h0+6LP7pG6ljYFLBuV10Kj3hutx+bJpwqy 5wWjAEv18AlHXlVYvCL4jpIX1B3Tr9X1/glHwg7VeTbf24yIiCduXgOhqcCiikK63yBLzRN9qaki 3dTfbNMXqF7X2A/16ktY3VrsfiVViNP9JEY+VYVC+62r7isy7JcGZtDIno3dXxZue3Op91BXs/M1 mEw6bRAUtRSlu9fFPqf5OXw2NoJiU380WmVIV7/tM9Iy8vHDz6qozVm8IvUbiC2t36/gd+Oy8USP E32+Ks/ppmk5mhb/3PVY5S6X8p0v1IqnFkL73UEFyWx/C7Ap6N5FLTu8h/FEaOr71ZAqJzoOrOyr /Gb6LdR8n0+1rLlZ3rPclHnzofZNg1QpBKU7lnR86zhL1zrn39NoWrr3cUHduf9E7/nTxRNd/En3 U0f5UNunC2BaT0O/f6jvYV10s9+B1G0IHw3JXxdWRERsOZslECIiNodJp5g+K8yvun9QvQI0auvV dV3ri2n7ERGxcCUQImLRmHSK6bPC/KpAqN8lfPrLaf43RItp2xERsbAlECJi0Zh0iumzQkRExOKQ QIiIRWPSKabPChEREYtDAiEiFo1Jp5g+K0RERCwOCYSIWDQmnWL6rBAREbE4JBAiYtGYdIrps0JE RMTikECIiEVj0immzwoRERGLwyYFQgAAAAAAAGg7HD161O3fv59ACAAAAAAAkDQIhAAAAAAAAAmH QAgAAAAAAJBQCIQAAAAAAAAJhUAIAAAAAACQUAiEAAAAAAAACYVACAAAAAAAkFAIhAAAAAAAAAmF QAgAAAAAAJBQCIQAAAAAAAAJhUAIAAAAAACQUAiEAAAAAAAACYVACAAAAAAAkFAIhAAAAAAAAAmF QAgAAAAAAJBQCIRQcJSWlrouXbq4zp07IyIiIiJiI6ruPHr0aJcLBEIoKMaMGeOGDBni9u3b5wAA AAAAoHF27tzphg4d6htWmgqBEAoKXd1QgQYAAAAAgOxRg0rXrl1dUyEQQkGhJm8AAAAAAGg6udSl CYRQUBAIAQAAAAByg0AIRQ+BEAAAAAAgNwiEUPQQCAEAAAAAcoNACEUPgRAAAAAAIDcIhFD0EAgB AAAAAHKDQAhFD4EQAAAAACA3CjIQnnTSScf585//3HXo0MGdKAMGDHC9e/d2O3bs8I87duzol6+/ oqqqyk8vKSlJvUbr1jyalm+0zHT7GwoNk20hts8x9Gc/+5m74447UuUBAAAAACBJFHQgPPnkk935 55/vtecsuOVKPNwpICoQ6K9QGNR0PWc8/PDDzRYatB3aJqlwEgZgExqmKYFQP7yp99xU8Nf7/sgj jzgAAAAAgKRR0IEwbJGzoBYGJAU0PS8V6ML5y8vLU618+mta6LL5LRTY/woGmn7NNdf457UOW1YY CMN1h62J4bo1j/6mmycdmifeKhhuX7jucJ9sHnsfMi27oenFTFMCod6DOPrMGypXIdl8rvH3Oj6P LT9eZgEAAAAAWpqiCYQWlqzi3qtXr3rd/uyvVb6tJVDdTO118e6Cam0Mu4yqFTA+j7XghdvTpUuX 4+YLWxStRVOhMpxHr2uIdIFQLVp6rGUaFlrVghr+DVsXbVv1t6HpbYETDYT67Oz9tc9bj/X5xVtp 9f7dfvvtqekqc+HnqvJm3VDD1u1M09vaZwEAAAAA+aOsrMx9+OGHWTt//nzXVAo6EKoFxVpbLNSo Ei7iIc2CnQUzm67Kt6ZZa4w9by09YSDUYwtgWo8tO1yX3fOn57QMtQZapd+6s4aBUPPbMhvr/pku EGqbtA/SWihte2zbbX+0LRYW7X2wkGtdJePvU1ugKYFQ+22tf1KP9d7aZ633z8qY0HselrP4e6dy pdcL+/zCgGefh7CyE58ehn0AAAAAgJCPPvrIXX/99Y2q+XKhaAaVSdeyZd05w8AYD4RqSQzJFCQt zKW7hzB8TXx+EW+9tEAYdhWMB710pAuEwkKdtq2ioiLVYmjbmi7AWIC0/8MQZM+1FZoSCK31z9Rj vX/x+0OtbOn+0XggDD9X+8yEykQ83MWnq5yG3X3t8wAAAAAAyERjoTDXMCgKOhCqVSu8lyustFvX O2mDz6QLhPHueCcaCMNwZoSthsK2JVz3iQRCe17LtdZGBd102xquKxzBNBykxmwrXRVPpMuotcDq fRUKgSpPUu+rvd/ZBELNH/8sLMALtQZqXWEgNRnlFAAAAAAaIlMoPJEwKIrmHsIQq2Srgm8Vaau4 N3cgtPWEo1KGgU3kOxAKC782GqkNTBKuV4ThNOxuGhIOuNMWyMc9hPZ5KwiqVTAk20CosqHXh4Qt gOmm2wA1AAAAAACNEQ+FJxoGRVEGQgs9CjoWbiy0ZRsINZ9elykQaj67rzBcVhiyrJUu3j21OQJh eL+g7aNtq1SIUSuqdZ21wBreU6jp1gUyqfcQNhYINU8YCG1QomwCoeYJB5kJB/QRVnbig9BwDyEA AAAAZIuFwnyEQVGUgVBY0LFgaCN6NhYIrYXPQmA8EIYB0F4fX5ZCaDhP2OVQNEcgDLt/WiAJWwjD 7Qm7IOpvfPTUttZF8UQDoT47a0W18mGtsSoX+mstew0FQqHQHR/QKN10u6igz6KtdN0FAAAAgJYh nz3MCjIQZotCjbXaNZXGKuFaZmPLtVFHmztc2e8MWsulEe/eatuTjhN5rwqdXApxQ8Tfq2zKgs1n B6fNb799GaehzwoAAAAAoKUo6kCYFMLWvXDU1EyDyiSNfAfCXLF7W+0zspbk8H5TAAAAAIBCgkBY BFjX1njTsAKH/cZikimUQCj0WVgX3vA+VAAAAACAQoRACEVPIQVCAAAAAIBigkAIRQ+BEAAAAAAg NwiEUPQQCAEAAAAAcoNACEUPgRAAAAAAIDcIhFD06Ife9+3b5wAAAAAAIHt27txZ7/fUs4VACAVF aWmpGzp0qC/QAAAAAADQOGpQGTJkiBszZoxrKgRCKDhUkNVSqCZvRERERERsWNWd1bCSCwRCAAAA AACAhEIgBAAAAAAASCgEQgAAAAAAgIRCIAQAAAAAAEgoBEIAAAAAAICEQiAEAAAAAABIKARCAAAA AACAhEIgBAAAAAAASCgEQgAAAAAAgIRCIAQAAAAAAEgoBEIAAAAAAICEQiAEAAAAAABIKARCAAAA AACAhEIgBAAAAAAASCgEQgAAAAAAgIRCIAQAAAAAAEgoBEIAAAAAAICEQiAEAAAAAABIKM0SCDt3 7oyIiIiIiIgtaMEEQgAAAAAAACh8CIQAAAAAAAAJhUAIAAAAAACQUAiEAAAAAAAACYVACAAAAAAA kFAIhAAAAAAAAAmFQAgAAAAAAJBQCIQAAAAAAAAJhUAIAAAAAACQUAiEAAAAAAAACYVACAAAAAAA kFAIhAAAAAAAAAmFQAgAAAAAAJBQCIQAAAAAAAAJhUAIAAAAAACQUAiEAAAAAAAACYVACAAAAAAA kFAIhAAAAAAAAAmFQAgAAAAAAJBQCIQAAAAAAAAJhUAIAAAAAACQUAiEAAAAAAAACaVFA2FVVZUr KSnxfwEAAAAAAKB1aZFAOGDAAPfzn//cnXTSSSlPPvnkJgVDBUm97vzzz3eFgm2T1P8htr+FGn7D bQ8/kzvuuKPJn0t83xubv7y83AEAAAAAQOvT7IGwd+/eqcChMKfAYWHpZz/7Wdbho9ADYXy7iiUQ Wouttd5qP7Tt2W63Pk+ZLZq3Y8eODgAAAAAAWp9mD4QWjOIhQMFDzz/yyCP1nlcoUYhUq2IYSuKB UK1Mem7Hjh2pecLnZBh2bJlC0/RYhusIXx9uRybirWxdunQ5br/jy7f1xpdrLW3pts22JV1LXKb3 qzFs2+Ov0fq17eHnEm5TuN3aH30e11xzTb1tC+cPn7f5FQrts8m0T1qGfXa2vEz7mM1nBQAAAAAA x9OsgdBCh1oC48RDmh6ry2IYsBRMLDDEA6EFyjBQhCHMWiY1n9YftuTFu6/aMmyZt99+e73pDz/8 cIP7p+3WOsIWz3gg7NChQ+q9sO3RPBZobVq4bfpf684UOm2Zob169XJN+WzSBSyFd63bPhdtlwU/ PW+fwdVXX+0f23Sh0NfY/PacbUMY6vWcXq/nFBztvbX/9dqwy6k+K5uuaZonXB4AAAAAAGSmWQNh 165ds+7mqQq9tRiGgc7CQa6BUK+3+9YsiNl9clqXPQ6Xqb+abtufLtCKcJsUovS/QlB8W2Q8ANq6 tJ3CAp22Sdtq4dgCUHxbbP+0Pi3f9s/er8ZoKBDasu1zCbuEVlRU1HtdfLq1AMbXY8S7jNp7F063 11vIC7dR74+VAW1n+J7qr943uqQCAAAAAGRHwQRCC0QhFprUiphrILSAFk6312i56ZYZdj20EJmp q2L4+nD56bqMKrBYt1GbHg+EhgXMMNyE82i/LEBa98x4yGyIbANhuO16X6zFMlMgNDQ9nN+IB0KV kbB8hK3C6ZZt4Vp/w+6nph4X0n2mAAAAAACFTKt1GbWRR621zlrDQqzV0O5FyyUQxluvwjDT1GVm 2j97vT22bpT2OoUpW7Z1pzzRQGjLsy6YoQpZjdFQIFTIVEubsNZKG4HUtitTIFSXVeu6Gc5vxAOh 3htrxbUgnWleEQ+E1v00tCmD3AAAAAAAJJlmDYRW2VcFXve7hViXSBu8xOYLuzuGAS0evqyFLGwN s8DUWoFQWDfUxrYlvv1NDYQWlsPWTBukxQbVse6q6cgUCPXYgrrtfxgwG+symml+I13I03um5zQt vAcyXQtheN+hpsUHJbLuswAAAAAA0DjNPsqoKvgWZKz1Jrw/zoJFeA9e2NXQWozi4cuCl5alUGUB qbUDYRiC49ui+Wwk0xNtIQxbI/V+WTdUe0/D6ekoyfCzEzZwi+2v9sW2QfuWrsto2C03DKma34Kv kSnk2YA64fus+az1MFyerc9eZ6+xEVLDgXcAAAAAACAzzR4IRXjPXBgO4yEr3roWzhMPX9aSFc4b Br7WCoTC7p0Mu4yG26oQY0HJWtOaGghtPfFRSa11LNtAGKp5tb6wldb2JeyOqu23LqXh70yG223z 67GNAhp/b0JsVNIQC4/WBde624afhS3f5okvAwAAAAAAMtMigdCw1rGqBn4vr7GujnGaMm9r01zb mmm5CmsW3E4E+0zC0TwbGsm0qfMLa+kMCbuXNvbehesDAAAAAIDsaNFACC2Hwne6kFVoaDvVxTNd S2a6+w0BAAAAACB/EAjbKNm0yhUC1iU03UAwCoPZ/IQGAAAAAADkBoEQAAAAAAAgoRAIAQAAAAAA EgqBEAAAAAAAIKEQCAEAAAAAABIKgRAAAAAAACChEAgBAAAAAAASCoEQAAAAAAAgoRAIAQAAAAAA EgqBEAAAAAAAIKEQCAEAAAAAABIKgRAAAAAAACChEAgBAAAAAAASCoEQAAAAAAAgoRAIAQAAAAAA EgqBEAAAAAAAIKEQCAEAAAAAABJKswbCHTt2uJKSEldeXu6aA1t+VVWVa2m03tDm2kdo2zSl7Kic a36V+3xiyy2E46g1tgEgV5rjeAQAAGhpmjUQ6svypJNOcnfccYdrDnr37u2X37Fjx0bn1Zf2+eef 7x5++GGXD7Tek08+2S9T/uxnP3M///nPs67Qdu3a1Q0YMMBBclFZUTlS+ckGHUeaP9+hScePlqvj qTEUXrW9HTp0cCdKuP/hcaS/2e6jjmcuxkBrke3x2KtXr7wcMwAAAM1BYgJhUyvfjZGuIqDtUCjM 5oqx3pNsKuDQdmlqC3pFRYWfP980JRDm85i2YzLO7bff7o+jbNDx3BzvCUA2ZHvhQsdYc30PAgAA nCgtHgi7dOniK3syXpmzVjybphY0/dXVVaEv33C6VWQtEKpifc0119Rbvl6j59Wap3mtBcLWp6u2 mlfTtZ3Zdv/JdGVYy1frn22Pba+Wr30XWo/m03PWYqn1PvLII6l5bZ+h7ZKu1VrHQ1hmwnKgcmVl 2uZTmQqPiWwqqOFxpLJoLY8WCMNtsHlsnXYc6Xkda7a8sOxm2xKSKRDqfdHzdm6w80B4XhDWohiu U8vU9qY7v0DbJX7cWJk1wvO8ynm8lTv8Xoq/tiHsmFOZ1fFgywnLpI5bW7YdM/Ftsu8GEf9e0vaG rwv3NdxWa4W0baD7NQAAZEuLBkJ9WVkrnbWmhRU/fenZ/FbBDAOfPbZKrCqDNl1fovalqy9QC4v6 QrUKq1VkbXnaDj2naVYpzrYFMVMg1D5oebY9qrxqPv2112h/bT5rHdJ26rFN12upzLZt4q3WVkas jFp5Dy8kWBmy1nErv1aWsym/ttyw3FsgtG2y48iOG5VXlVWbX+XVLnxoXh2L4fKy6ZqdKRAKW77N Y/cX6jmtS1hAtflsW+w40vZTMW77NFRmhcpiuu+d+PeSHmu6df/P5uKgHY/SjgG7CKnHKqNq2dey tX4732ubLMzpOa0vPM617eE0azHXc/bdoGm2P8K2Xeuh9wkAADSFFg2E9qWdbrq1CoQV2rAF0OYN r5SG0/V6fQla64F9IYdfpOHyw+XZF7pVqrOpQGaaz8Kqtie8R9AqDPaasMuoBcAQVXLDfYW2R7xM xsufypDKjAWgdIHQji07fhrrammhM2y1D1sI7Tiyiqv+pjtu7PW2PB2DdhwppGmbG6tQNxQIrfIe P45se8L54i2JIaqgS2i72PFgZdbKpJWF8BgS6b537MJhePEwmwtyYSDU/2GZD4NZ2GXU1hl+f2ib LYRmmiYstIZo27WtYTgEAABoCi0WCKvS3MMXhkBdRY1XVMPKZvh/uulCV1itMmpmCoRhC0vcplQE 4lhF1tahxzb4TKZAmGlb+HJv28TLpLVchFgXTR0r6QJheDyELQmZSHe/oC3LnrPuanYMNRQIbXnp bOzCSkOB0FrXbXvC4yhTIMy0LVxYaduEXSzttoCwzFrgM6zcqQxbeU5nNvemh4EwfuxlCoQNrdOm hYTLtvIfVxcQtQ7KOgAA5EKLBcLwSqxhIdDuw4hPtyu1YQthGBjDSrGFQ2vxEw0FwrClxL7QdYU5 22HE01V4w+5tdlU3nKcpLYTaBoYzb9vEy2QY/owwJOYjEKZ7XRgSw5ZHK4MNBUJVRK1CGj+Ost3/ OLaOsNtn+J5kCoR2ASaE46jtY2XWuurHjyu7sGHlICzj4bzx8tvYBQ2RSyBMV+5tu9O1NIbfD1qG ddU2quruYWTgGgAAyJUW7TJqVzfVkmfdu/TYBs6wxzYoQHil1rrP2fwWuGx6/Es+vB9L2BetlmFd 4ywwhgEuvB+joavEYSC00SLtJn+hL+0w3Ib3EIrwi922JRxYwO6jhLZLvOJq4UoXNVSe7N4nK1P5 CIRhN1SVyfA40jJtG7Rua3kJL9TYMa3Hem1jx5Hd55QulMUrxuFxZGVff8NWDx0jYYU5HGTG7tu1 roN6zABNbR+7cBgvs3Zc2bnczs/xewit94Z9r8S7buv1mUYCziUQ2rRwUBv9H25PONiYyrAtO35f bFVwKwKBEAAAcqVFA6G+tGzgGAtn4dXOqroRAvWFqPnilV67wd5eb1/c4aAy4TQLkGHl0aanW15Y mcwmEIaGg9XYvli3Oxtdzrq9Cat4W6UlHDzABgagZaNtU5WmG7VVbsNybOUgH4FQqOIbdq+zY9IG lUl3HNlyw+PMngtDpYVFq7DadqZrbbH9jx9H4TkhPC4sKGp74i2U4T2N4XFEBbntk67MnhTrbaLj xL5X4vfRVtXd95rpe8mOjXRkGwjtuzA+OIwdW+EIwVXBfbhW5sNlhwE3PF4IhAAAkCvNGggzYd1j 4oHHRl4z7Isv/gPu6V4bTqtqpKtP/LWZXqPKw4m2LoTbmk33tYb2DdoONlhKPBDatJYoByd6HGX7 mnzc18RxBI2R6TO31jeblu5+dGHHXZxwsLJ8k+6YsdsWbHttNF2XZlsp4wAAkA9aJRBmIrzyaVds 41+ELYX95htfuNAchANLhF2F87VsG+02bkuXZ21L/J4ngJbEWpGtJc5a3rK94NHSrW7Wkqljx7pQ 5/scAQAAEFJQgVDY8Nk2UExrQRCE5iT+8w4A0HzYPXZ2v3khn9+r6n76QsFQYZR7YAEAoLkpuEAI AAAAAAAALQOBEAAAAAAAIKEQCAEAAAAAABIKgRAAAAAAACChEAgBAAAAAAASCoEQAAAAAAAgoRAI AQAAAAAAEgqBEAAAAAAAIKEQCAEAAAAAABIKgRAAAAAAACChEAgBAAAAAAASCoEQAAAAAAAgoRAI AQAAAAAAEgqBEAAAAAAAIKEQCAEAAAAAABIKgRAAAAAAACChEAgBAAAAAAASCoGwEaqqqlx5ebmD 7ND7JaF5UZksKSlxLY3Wu2PHDgdQDOhcpOMkH+ckyj4AALRVCISN0LFjR3fHHXe41qRr166uV69e rhjQe6X3DJqX888/35100kmupdF6swmimufhhx92AK2JzkU6Tnr37u1OlJ///OeUfQAAaJMQCBuh EAJhMYUsXUHnKnrz01qBMNvPVxVwbSNAa2IthPk4J2lZlH0AAGiLNGsgVBcbfTF26NDB/9UVVv0N u2Bq2sknn+yn6a8eC33x2mulTddrw8cDBgxILUtf2LYeTWtKq5p9ieu111xzTaqLkYKYHts649vf pUuXevtm26NKiF6j6ZpmXU/D7bN9tW1/5JFHUtP0OqErzT/72c9S22XvTfgehPup5dv7oJbFEM0X rtOWb1e9bZm2L/Ye6HXS9kXzxd9bbZv2L2zN1LL1foTvT9h1S8vT9tt7oeCbtO659h6k+yzD907T 9P7Y+xcPhGE51Lx6763yquf12D4/fVbxlj57rrEKr5Zjn5EdC7ZebZ9er33QY5Xb8DMPP+94C4pt m70H4b6Gx3W4PK07LGN07U4mKi/6/OOqPNg0lZFsvo8aIjw/pSv7ti1NLfvxc3n4Oso+AAC0BM0a CFXhVKVVqsIp9b9dPVUI02MFIf2vL0Tr3qMvPv1vX6z6wrXHVjm2x6qEan4LMxbiNN2CVUNofdYd SMvR6/VY6H+tQ1/UNk2Pbf/ir7NpFjC1rdZdSfNqX+2qtea1L/Jwmp7TY62zoqLC70tYGdH/4XI0 rwVR7bPWqW2JVxJsnVbpt/dYf8P3QK/T8i2A2vuhx5pPoS+8Am7bYNtmrZlWkbFl6vVabvw917Tb b7/db0tr3BfXWugzs2PDyou9B/bZ6D3SNL1vemwVzzAQ2nGk5/S/lX27IGDHoC3PutHZZ2Hrss+7 IcIgaa/R5ydV7rROOxb02OaNf94WUoVViMNpVi7tuLbl6q+VYSt3dozRMp1MdBzpuJBWduw4CruM ht9HNr/KkszmHsOwy2i87IdlNF727aJneJzYOTJe9u07kLIPAAAtSYsEwrCiqS80q8hquoU/faFZ pVdflmGF2ND/9mUprOJrASYMk9Ja1hojXWuafclauDRsu+z/sIXSKvj2+rCioWWF97HosabrPbCg FhIOGhKGLNuv+LZaQNP6G2oZDSv0ep0FDKuQGFqfLTMMyOG2WyXEKlfxbdXrw20JtzPeGqZlJS0Q qszZ8WHvv3Vvs5Bun4mVLXv/wkAYHkfCKsH2OVglOPx8rSIcbkdYljMRD4TxMmPlIN5tLn7/VViG 4tPiFyriQVWPtc12fsmmMg9tHwtQYdlPFwjDcmnT4+f/dMQDYVj29f1j68y27KebpguAlH0AAGhp WiQQhve/2Re20JeZvuDsufDL3CqF8S/WsJuctRJqPfZ/OhujocEC4vcQhoHQum5aS2C81SZ+H4l9 wdu8Fggbu+ckDFnhVe54y4+IV1TS7Y9VMsIurtZl1bo1Wbcre421JhlhBci6xMa3Nd4tMdxP2/eQ bAdtaCuo/MTLrXVXDrsFW0t4pkCo+bWcdMeRsFbjEKsI6/22LqvZEA+EYYW0oUCY6dgMw1+IPZfp uNbzYcs0JBu7sBD/vkkXCMPzebrnMhEPhPGynykQZir7Ok+fSNmPH9MAAAC50qqBMOwipy90a6nI JRCmayG01rfGsG55IbYNDQVCC1fWUmZXd0W8UhDvImrrtUAYr9jqeWtBC0OW1hFvIQwH+mjsqrFd nbZuToZ14bPlhNsfVnbC7bNuUeF+ZhsIw26utl32WSYFawkU2m9r8bawbf9rPitb6QJh2EXUWqLj gTB+wSFsvc+2QmzrzSUQpuuWZ4/jFwfCkKh9im+blXcCIRiZynG6QBi2ulnLe/yCVzpyDYS5lv10 A5qFZf98Bq4BAIA80aqB0P6333eyL/VcAmHYHUj/64teX7Zhl8hM3YLsno8wDIX3EGYKhGFXSaEW nUyBMB76bHstDNt9ikKPwy6V8VFGtZzw3shwOxoLhMJa/8JtD0OxfRYNBUJbTrzrZ7aBMP6e23uX pEBolVXtuz4zfaZWOQ27T1trYWOB0MpSeByJdIEwXIYdg4aOk0zdR5sSCMMWDO1POJiGDSJj2x9W 0m37q4J7bcOu13YxgUAIQuXKyrHKrsqedbfOdA+hyp/KkH2nWJm27pjpaEogDMu+jolMZV/HU65l n0AIAAD5olUDobUIWpe4sIWkqYFQ2L1utsxwVLb4fXAh1nXP7jkMr9o2FAitlS0czEav1Zd/PBDa l7mtw0KZtfZZ5cTmCSsJ1uJj218VDKATH30um0BoV8XjIcDWYQPcWAUrUyC0QQ5Csg2EYXdJLcNG WE1aC6GV+XiZtbIVPh92/QwDoX2eZry1JFMgDD/zkHDUxDjZBsLwfi7rAqvtsvIvrfzFjz87juLH rh0bYfdpAiGEFzZC7bwVD4Q22FU4n2HlLx3ZBsLw2G2s7NttE2HZD5fdUNknEAIAQL5o9d8htG5z +RwlzbqMxmlsFMWwC19T12fb39jvtMX3NV1Xomzfi0z7mSvx/W9sX8JBaZpKum1XRSiJo+U1dAxk Wx6aehyFAzHFByFS99RMleITJd0xpm0JnwsvuoTk+zwBySJ+v2C68kTZBwCAJJKYH6ZXeMlmFEVo nKq60VXDwWSailqn7B5E+9mJbH72AE4cq3Ra62D8M7QW+pbCRrS1rt/2szIA+aQkiwFkWqPs2yjD VvazuZ8RAAAgnyQmEEL+sG5O2QzV3hA26qq0e+Wg+dH7rEBfSL9fFi8LAPnGBlwqtG7plH0AAGht CIQAAAAAAAAJhUAIAAAAAACQUAiEAAAAAAAACYVACAAAAAAAkFAIhAAAAAAAAAmFQAgAAAAAAJBQ CIQAAAAAAAAJhUAIAAAAAACQUAiEAAAAAAAACYVACAAAAAAAkFAIhAAAAAAAAAmFQAgAAAAAAJBQ CIQAAAAAAAAJhUAIAAAAAACQUAiEAAAAAAAACYVACAAAAAAAkFAIhAAAAAAAAAmFQNgMlJeXu6qq KgfZofdrx44dDhqnpKTEv1+5Ti8k9JkXy7Zmi477Xr16ZTWv9l+fV3iu6N27N8cCAAAAtChtOhCe f/757pprrnEtjdaril1rcscddxRNZfvnP/+5rxhDwyg4nHTSSb58NTRdn30xoGMk0760FCp3Dz/8 sMsXeu8tEJ588sm+bJvhvnbo0MH97Gc/8/Porx4LvScdO3Z0AAAAAC1Fmw6EqhyrItbSFEIgLKaQ pSBDq0jjEAgLexv0/ofnG30WmebTNGsZ1F+FQh2vOg60DI4HAAAAaCmaPRCqsvPII4/4So6uhquy GlZ2unTp4itkdgU97G6lecPKmipMejxgwAC/DP2vq/u6um7LD6ep0qWKlv5Xa5mWpxZDzaP5bfnh OrU8PZdNl89wveF+6fW6yh/uV7g8e118WteuXf226D2xiqW2NVyOHhvap3TTbN+1XdbyoHVo321e az3UXz1vywqXb9sa7wKn+bWvMtNnq/dRn5em2/seBlRtj9an+cPWTD1nn7OWGbbeaN74Z93ageJE sX0N38N0ZUXTVD7CQBh/P2y6BUJrIdfnp3nssw3LX/iZab16nK5sxqdpudl2i85UTi2MWXnXPoRl Lf7e2DRtb7zMhtuX7jyT7li198XOEUa4PXb8iHiZjqPnpaioqPCvt+0N0fbaNEP7Yy2DWrY+SwAA AICWoNkDoSpWqqRaJSqs0KqyZcFFlSGb14KDPTZUgdRj/bWr7KrMqTJly9ZjVcC0PHus/+3qvR5b y6HNE1awbXsawyqYds/W7bffnlqOVWLDaVaB1LZrmp6Xel+sW6tVaPXXKrn2fuh/VRK1/cL2R6/X /5rfWhmkpml+q7SH89o26H/Na13X0t2/pGWEleWwMmtBT8vRvlgoCd8DvcdaR1jhtffB3pOwNdM+ D1umpllrqyrkWodNs+BbrNjna/uoz0ePrTxof+39CI8P+zzC4ymcbu+rlX9bhz47e02649HeTy3L yppdmLBpej4+rbF91LxWFu21Kmd2PFu5VEDTY7vYYOXZyre1qtkytU1anl0AsuVYubGyaOXGjjk7 32he/dVjK386rtPNa+9BWKbj2EUKYcejnXPsmBd6fbwrexgytd2t0dUdAAAAkkmzBkKrxIVX01UZ CoOAVQ5FvEtcNoEwDCuqkIVdseJdRm154dV3q+iGFdRsBoWwyqqh14ctdOE6wpas+KAf1pIo4i2i 4TKFXmfvRzyo2bLDAGjbl65bnCqgVrEN37M4FpLtMwrvkQrXZy19YeU5/NwteBphS1E8EIbvjy3T tiPcTtv2YsXCue2vHS/2WcXLr+2vtaxmmh4GwrA82zFjId5a1ew9t2NBoUiP1coVvzij1rP4tIYI L3gYdrHDLkyEWFmIl/2wm6X9H5YTW6awgBiWm3BeC5gifmyEwU1oP63cxst0nHA9Oj6173bcaFvC i1Xx5YTPWQ8GAAAAgJagWQOhtcBlup8uXWtc2PKQTSAMK1ZWoW0sEIZYNzu7Kt9QODKqYvcAxYnf Q2hd3+y1qihqv6WeDwNhfEAJVc6t+6QFXpu3ocppGLLsc4ir18eDWqb9sYCreW2/rRtuOHhGGAjj n7ttU1XsXqt4IAzfV3tP7D0PSfdcMRF2+Qxb86yFNH7BI3wuDHfx6fEWQsMCZzotmFoZs2PHukw2 NK0h0pVpI92FinQXMuw4iQfCkLAsWnnMVG4ybYPNm86qui7ODd0b3Ni5w1ppG2shtBZ+AAAAgJag WQNhGLYMtTBYxUeV1bDCGu+yGQ9wYcDMVyC0rml6rXU/bYx0rVXW/cy2I1MgDFsuRFghjVeerQUl 3oIq0t3HpPnDFh37P10XNOuWl03l07Y/3A9bR/jZxlsI45VnTdN26zXhtjclEIZdWou9hTDsMqn9 CgNfuhZAtVbFp4cXVNK1EKZ7vd2naN0rrUWuqm5wn7D1zlq9GprWEFqX3VcX7rde11AgDLs1G2Eg DPcr7F4arjdTuamq67pq2xJuQ7pQZ4/tGMhEeLFEy4+/NxYItc6G7iEkEAIAAEBL0qyB0CpqVsmz Fgqr7FjAU0uDDf9u3dKEBTw9tm5UTQ2Edv+Sjd6XLkDY6+LdRbWeTN1HbUAbw1rybFqmQGiVQnt/ VBHMFAjj3e3snktbZlgBtUpyGAjD9YTz2nuhfcu28mlhOd790Cq9tv6GAmFYHsJKdzaB0JZp77m9 d8UcCO2eQe2TtRaGrYJhF04rQ5mm272dDQVCYd209Tnaa+zzsJ9AsN+FDI8ne51NC7tn28WQdCNj piun9rqGAqGO2TA06RyQKRBWVR0/ame8LIbHati6Hg9n8Xm1XpveWCAM7yGMH7s2UI0Fa22vLSt+ LKXrDg4AAADQXDT7oDJhkAu7uwm77yzsmhW2JoRd3CyQNCUQWoXbKl+ZAmE8qIbLy1QxCyvJNiJh 2JKQKRBaq6l1sbRttAE/wkBog2OE3TG1PttnC9Tx7prhemxeG1HRttne52wDoeaPdy2152z/7bHd j5aue1269zTbQBiGlnBQoGLFylB4bIStfvHpVlbCLo7hdDuWGgqE8deELWtW3sJp1pLW0LTG7kON l9NMrXMi3q3YPuuwO2g8EIp4WdT8FkTjywrPQfHzQlVd11CbN7x40Vgg1H6GZVXnq3A5YYtheB6w ga8MRhkFAACAlqTFfofQKmbpCLurNWVatjT0WlXSrPUh3gWzqm7QjcaWXdXAfUPZvKax/QunW1fP TNMb40Tfyzjp9qUhwlbGpmKtU0Zb6VqXzeff0Puay2fa0DJtWrplZpoW/5mHOLkex42V/XTrCF+b btuzIZfj2sJkU5aT7j2Jt6ADAAAANCctFggLlbDFI14Js3uQ4MSpqko/qmRTsN/VKwl+WiPTgCXQ cujeRFq0arGBmnIl/DkWAAAAgJYg8YHQBnnIZ6sZHI91iW1sEJKGsJ8GCX9wHaCQiP9cRlOx7vAA AAAALUXiAyEAAAAAAEBSIRACAAAAAAAkFAIhAAAAAABAQiEQAgAAAAAAJBQCIQAAAAAAQEIhEAIA AAAAACQUAiEAAAAAAEBCIRACAAAAAAAkFAIhAAAAAABAQiEQAgAAAAAAJBQCIQAAAAAAQEIhEAIA AAAAACQUAiEAAAAAAEBCIRACAAAAAAAkFAIhAAAAAABAQiEQAgAAAAAAJBQCIQAAAAAAQEIhEAIA AAAAACQUAiEAAAAAAEBCIRACAAAAAAAkFAIhAAAAAABAQiEQAgAAAAAAJBQCIQAAAAAAQEIhEAIA AAAAACQUAiEAAAAAAEBCIRACAAAAAAAkFAIhAAAAAABAQiEQAgAAAAAAJBQCIQAAAAAAQEIhEAIA AAAAACQUAiEAAAAAAEBCIRACAAAAAAAkFAIhAAAAAABAQiEQAgAAAAAAJBQCIQAAAAAAQEJp1kB4 +MhRN2beRnfLR1Pcyc8Mdb98aggiIiIiIiLm2d8+O9Td9ek0N6tymzt69GjWma1ZA+HQ2WvdaS+O KKo3EhERERERsVg9s8NIN6tqW9aZrVkD4V3dpxXVm4eIiIiIiFjstv9+TtaZrVkD4aWdxxbVG4eI iIiIiFjs3vXp1KwzW7MGwj++TiBERERERERsSe/sNiXrzEYgREREREREbEMSCBERERERERMqgRAR ERERETGhEggRERERERGLyMtfG+Ee7THOvdBnfNY++dk4d/3bo45bFoEQERERERGxSOzwRYmbM2ee z16VlZVZq/kXLFjgHu/yXb3lEQgRERERERGLwItfGeamzZrjampq3OHDh92RI0ea5MGDB91Hn3Rz f3iyd2qZBEJERERERMQC99+eHOzu7DrSLVu+3B06dChnhw4d6m54qku0vJ/8cgs+EP7+pVHu3MDz Xh7tTn9xRF7f3N89P8wvO900rUvTfvvssLx/qNq3czqOcr95emi95095frhf56kvDM/7OhERERER sfhUILzvw5E+cx04cCCtajncsmWLq66uzjjPiBEj3N+eetv92xNFEAhPfmaoW7Rul1u+sTrlik3V bu7qHe79EYvdqc83PTD96ukh7taPJ7vL3xjnH//uuWFu8Ow1bnbVdv/4j6+Pcbd/MsWvW497TVjh Fq7d6W7+aFJeP9DfRMtfsGanm7pssw+G9vx5r4x2Zcu3umXRvr7wfUWzFShERERERCwe1aJngXD/ /v1pff/9991f//pX984777i9e/emnWf48OF1gXCQX25BB8LfPTfU7Tt42O3ed9DNWLHVTV++xZWv 3O6fO3T4iOsybFGT30gFvcpNu324rG2hG+nmrNrhw5mmfzBysTt05Kh74PMZ/vFnJcvd2m017vr3 J+b1A/3ts0Ndzf5Dbu32mlQgvPH9Ur8th6P1/zh9tftdM7RKIiIiIiJi8WmBcPny5T7spfP+++93 7dq1cw888IDbuXNn2nmGDRtWfIFw6Ybqeq1o/+o9wx08fNRVrNzhH5/2wgh3y0eT3Uv957rno1a1 a94dn5r3ss7jfKvbxa+NdS/9OM/d02OaW7l5j9u4c5+769Op7sz2I9xf3yt113WZ6Lfhi4krfCBT 2Dy7w0h3WdSSeF/Pab4bp5bX7vlh7sYPJ0XLql3Xn+paGuVFnca4q98e785/dbRr32+On+eyYHpo PBDe+P4k3xJpQVctmTbvBdHyHv9qtntlwDz353cnRPs73G+HtleB1uZr91ztcxe8Osa//s9dJriO /ea6DpE3RGFT6yykQo2IiIiIiNlpgXDZsmVuz549aQ0D4fbt29POU5SBcNnG+oFQoWvb7v1uwdra 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 5mXe1uUJBOn8889vSMhklCcesI9vfvObTeIUvyM4fnv55ZeXextrnHLKKY2NTNVJOMnODjvs0Pjt V77ylSbhmwr1uu+++8q5557bNybr9x/+8Ifl0EMPXeKYBP2CCy4Y1cb++te/NvaxvMbBiUL7xRlt jfEOkdVnv/jFLyZkVwcddFATw1cEMiyuXnTRRZPux2KQMWmjjTYqP//5zydUxlNPPVW22267cvbZ Z09q3WpceOGFZeutt15i4oNOJjOu8APjmEmhruNsRc61zTbblA022KCxwYneS1lf/vKXy/HHHz+u 6+TtG2+88WJxfjLw+OOPN/HAmF7/Lo589KMfbSa0R7teXiRXOOqoo4Z6kqXGs88+W770pS81MXxZ 3icJ4Tjx0EMPlfXXX78JXIKIAGMgmejM6njAOSRr22+//aSVKZiss846ZdVVV23a4h5HH3108/en P/3pcQXIcN4TTzyxfO1rX1vmAyTip44xkyQZQ0T32muvZXrfyexP5J4d1b/Tudm7M888s2lfm7yZ STXgSMD222+/cd3zV7/6VaMfZS7PYKu+X/ziF8s555wz0va2LvSfldHNNtusmXSZbF1L0o844ojl 1ublAYm6eGQQnozy+Ozmm29eVl555bLbbruNJI4GeDHhvV65lfREXJqKyQLi/MlPfrKZfJDgLu+J l374wx/+UDbddNO+9aFPdbbS0D527bXXNon+aDZmopItTvXdMhKetdZaq7FlZJ0NHXLIIc3fxvSJ jHe//vWvy9e//vUVghAec8wxDQlpJ+uToVdJq4nMn/70pxMqQ2z585//PCZhmAiiryTU/KC9+mSn jonWyYopdo4heldffXXfXUvae+mll5ZPfepTE1qdjHIjZo93bBOfTLBN1tgR6Kdj91tppZWaFfXR dnL5XZ4gpkxmvVZksCe+YSfCsrxPEsJxwgzqJptsUm644YaR3yRNZlj934BiFcSMj39/9rOfNdfE cr6gaXCWlJtZrIMfPZ522mnNMcTPgBWDDJ05JqmWMJ911lkN4npOhJQqe88992xWjmIGdDQEITRT 9L3vfa+pHzLn7zrxYohWlxAKK4B1YsiIzjjjjKbeyOBhhx22GCGUhEgW1Eu72v3vPLo6/fTTxzVQ jUUI1dv2FauGfvOvwF/f17YNhF4/WXGs76/e2qrtJ598clPGn/70p1HriPiY4TQj3z7mXldccUWj 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 SCUJYUpKSkpKSkpKSkpKypBKEsKUlJSUlJSUlJSUlJQhlSSEKSkpKSkpKSkpKSkpQypJCFNSUlJS UlJSUlJSUoZUkhCmpKSkpKSkpKSkpKQMqSQhTElJSUlJSUlJSUlJGVJJQpiSkpKSkpKSkpKSkjKk koQwJSUlJSUlJSUlJSVlSCUJYUpKSkpKSkpKSkpKypBKEsKUlJSUlJSUlJSUlJQhlSSEKSkpKSkp KSkpKSkpQypJCFNSUlJSUlJSUlJSUoZUkhCmpKSkpKSkpKSkpKQMqSQhTElJSUlJSUlJSUlJGVJJ QpiSkpKSkpKSkpKSkjKkkoQwJSUlJSUlJSUlJSVlSCUJYUpKSkpKSkpKSkpKypBKEsKUlJSUlJSU lJSUlJQhlSSEKSkpKSkpKSkpKSkpQypJCFNSUlJSUlJSUlJSUoZUkhCmpKSkpKSkpKSkpKQMqSQh TElJSUlJSUlJSUlJGVJJQpiSkpKSkpKSkpKSkjKkkoQwJSUlJSUlJSUlJSVlSCUJYUpKSkpKSkpK SkpKypBKEsKUlJSUlJSUlJSUlJQhlSSEKSkpKSkpKSkpKSkpQypJCFNSUlJSUlJSUlJSUoZUkhCm pKSkpKSkpKSkpKQMqSQhTElJSUlJSUlJSUlJGVJJQpiSkpKSkpKSkpKSkjKkkoQwJSUlJSUlJSUl JSVlSCUJYUpKSkpKSkpKSkpKypBKEsKUlJSUlJSUlJSUlJQhlSSEKSkpKSkpKSkpKSkpQypJCFNS UlJSUlJSUlJSUoZUkhCmpKSkpKSkpKSkpKQMqSQhTElJSUlJSUlJSUlJGVJJQpiSkpKSkpKSkpKS kjKkkoQwJSUlJSUlJSUlJSVlSCUJYUpKSkpKSkpKSkpKypBKEsKUlJSUlJSUlJSUlJQhlSSEKSkp KSkpKSkpKSkpQypJCFNSUlJSUlJSUlJSUoZUkhCmpKSkpKSkpKSkpKQMqSQhTElJSUlJSUlJSUlJ GVJJQpiSkpKSkpKSkpKSkjKkkoQwJSUlJSUlJSUlJSVlSCUJYUpKSkpKSkpKSkpKypBKEsKUlJSU lJSUlJSUlJQhlSSEKSkpKSkpKSkpKSkpQypJCFNSUlJSUlJSUlJSUoZUkhCmpKSkpKSkpKSkpKQM qSQhTElJSUlJSUlJSUlJGVJJQpiSkpKSkpKSkpKSkjKkkoQwJSUlJSUlJSUlJSVlSCUJYUpKSkpK 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 7HTmYvhwDw0hPP7qsmsPixPCv42cd8ntj438vem+f32XFD5VVtrhmCXL/N4p5eo7F60IvfOPf5S/ v/XOotWi3v8POfuGhkS2r1mW6CKEd/UIWReu+Oia5f5TTlLZMuvii8rFvb/j2G3rfaxM+9xmZV4v 136zl29e+e3tyy09UthVzoweGbz+B98rb73xxqK2v/VW+cfbbzf/f3P+vHL9N7/Wtw7LA3/b6ydN XZ468rDO452E8LQ1lsBLp3ykwSunrlEW3PK7Xjvf+Od20dn39s5Zszn+8Anrl3fe/OexhY9fUR48 YuXywOErd5YL82/ar/STNxfMKU/8cZu+104GXrtxvzL/xUfKqxf0v88yI4Tz5s1bKiBEPr0Q3+Tz TN3SlgldhHCiZR1xxBGLEcBNN920bL755kusFE5GXROJRCKRSCSGHSOE8PunL4GGEB53VY8QXrVY 0n3xLQ+XD3zz2AbTb324TLvtbyPXbLrPhQ0p/NNVdy9R3s9Pu7G5/saHni3r7nlO89t3j7mqzH/j zWZ76np7LfrtQzueWv7t60eWf/3qoT0c1qwq/sf3Tisf+u7J5V+/dkTv+CkjZX6o9/u/ff2I5gU4 zd/O+erhzbX/1px7amfboJMQ9ghbF2Yec9RiOnh8+rRy8Tprllt7xO/iz25a5j/7zD8Jz+sLyh1f 266znDu++uUeAXqzvPP3v5cnD9x/0e+9lbdnlP/OO2XhnFfKXZtu3Px+08fXKdPX/kiZttZHmn/9 7fc7ewT08t69b+79fUXv3zh+68c/OnIf51z10UXH4Ore//0Wx2/r1fuSd8u+dO01yh3vHnt0jx8v IoSHH9pZ/05CeOrqS+DF03t1OGzNctWvPtzDh8oth69f3njs8h4DfqfMvegrzTlevvL6jKPKwofO Ln//20XltUevKLcfvUl57Oojy+PXHl2eO3G1zrLn3fibpo6v33dqee2Sb/WwQ4OFj1ywiFQ+d8fI uU8dt2q595D/Lncf/F/l4SNXKi+f8s9y/nb0yuWeQ/6r3NM79uDhK5XZJ//z2Eu9/z90xErNsXt7 5zx74qoj5b1w09GofHnsrG3L08ev2lnHZUYIX3vttQlj1qxZ5cILL1wMtl8uTZmBLkI40bKef/75 5tlGxO/kk0/u+cU7DY477rgRQrjWWmtNSl0TiUQikUgkhh1BCD/0vVMXw3/0sIgQXll2PWHxFcL7 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 m4/e/+t2h5STLrqpHHzODUvUBboI4W090teFG9davVzYI1jxbF4/aUjhaiuXW/uU83yPxJFHzj2n TF9tpabcG9Zcrfx19VXK3MdnNWRt5g937pGTt8qcBx8sN/ZW5a7vHb/lx4u2cv7toAPKPVtvOUII o9yZP9plEZE7+MAyu1cHctMPvt+UfV0P9x16cHPNE4cc2Dxv+My115TLVl+53NS7/2W9ez90xunl 0WOOWqycrvp3EsITP9SJNx46exHBvfLgcuUv/q1c9fP/Ua7Z+3+W6375P8vtv/2X5pxnf//B8sR1 R5e7T9++XN07fvXe/6M8Mm3f8vxd55U503boLPe16/b+JyGsfn/1/M83RG3hE1eXeVfv1pzz5BX7 lSeO+kB5/tgPlkeOW7e8cN/F5eXpO5aX7/9rmTV97/Lku8devOmI5vzX7z25ed7QFtEHDvuv5phz nrj812X2jDPKyyevUubffnhzn2f+tEV5rlf/rjouM0Log+1Lgy5CuLRlQhchnIxyH3jggXLZZZc1 uPfeeye9rolEIpFIJBLDjhFC+O5nJEbwrWPfJYTTy849WH1b4pwKH3z3/J2Oml526ZHIhhC2zvnZ yYs+cO+lMvuceFH5zv5nlL1+/5fy5POvNL/vfep15aq7H2/udfQ515TvHXhWmX7T/c2xZ2a/Wj77 szOacn552nUjBOyQ824dKf+ae55ofjvjklvLt/c7vZw+fdH2wzOuur+zzl2E8NYeQerC9GZlcEky +E7HS2Ueu/iv5XLP/XWUc9fmm5W35r66iChNn1au7RG96/f6SXnhrjub3+b0iNqMjddvSNvrs2eX 6/bcvdz0y73L6y8u2jL6t7+cX+7b/msjhDDKfahHIhcRuQMaQkmJC154vnf9T8qNvev/3ltYsV11 xqc2KHNuvL45d+bZfypX7fKDMvPPf2z+fuGcsxcrp6v+nYTwhA90wmclvNDllUeuXaSr3grcm/Nf bp79mzPzkuac+3//id7vf1/0kpuF88tbb7zWPAto1c71XeXOu+7n7xLCfRc/dtJKPb0tLPOfun3R /9+Y03zj8OGL9yn3ntUjgY8sspt5V+3WbDd9561/HnvurvMXEcIZR5YFtx7Q/N9W0Xv/+L3y8EW/ bOr49pxHm/ssuOPw5vhTN59SnrngO511XGaEcHbPKCaKadOmle22224xQrj++uuXffbZp7zYM7Cl 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 IpFIDCn+/+6eCsZPWwq7AAAAAElFTkSuQmCC --001a113f8e7e5413480553b1de28 Content-Type: image/png; name="expression.png" Content-Disposition: inline; filename="expression.png" Content-Transfer-Encoding: base64 Content-ID: <15cc18ce64fb15721d31> X-Attachment-Id: 15cc18ce64fb15721d31 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 EolEIpGc+iJCKJFIJBKJRCKRSCQlKiKEEolEIpFIJBKJRFKiIkIokUgkEolEIpFIJCUqIoQSiUQi kUgkEolEUqIiQiiRSCQSiUQikUgkJSoihBKJRCKRSCQSiURSoiJCKJFIJBKJRCKRSCQlKiKEEolE IpFIJBKJRFKiIkIokUgkEolEIpFIJCUqIoQSiUQikUgkEolEUqIiQiiRSCQSiUQikUgkJSoihBKJ RCKRSCQSiURSoiJCKJFIJBKJRCKRSCQlKiKEEolEIpFIJBKJRFKiIkIokUgkEolEIpFIJCUqIoQS iUQikUgkEolEUqIiQiiRSCQSiUQikUgkJSoihBKJRCKRSCQSiURSoiJCKJFIJBKJRCKRSCQlKiKE EolEIpFIJBKJRFKiIkIokUgkEolEIpFIJCUqIoQSiUQikUgkEolEUqIiQiiRSCQSiUQikUgkJSoi hBKJRCKRSCQSiURSoiJCKJFIJBKJRCKRSCQlKiKEEolEIpFIJBKJRFKiIkIokUgkEolEIpFIJCUq IoQSiUQikUgkEolEUqIiQiiRSCQSiUQikUgkJSoihBKJRCKRSCQSiURSoiJCKJFIJBKJRCKRSCQl KiKEEolEIpFIJBKJRFKiIkIokUgkEolEIpFIJCUqIoQSiUQikUgkEolEUqIiQiiRSCQSiUQikUgk JSoihBKJRCKRSCQSiURSoiJCKJFIJBKJRCKRSCQlKiKEEolEIpFIJBKJRFKiIkIokUgkEolEIpFI JCUqIoQSiUQikUgkEolEUqIiQiiRSCQSiUQikUgkJSoihBKJRCKRSCQSiURSYvLLL7+4srIyEUKJ RCKRSCQSiUQiKTXJixC2bNlSEARBEARBEARB+A3hnnvuESEUBEEQBEEQBEEoRXTt2jUdIfzhhx8E QRAEQRAEQRCE3xA+/fRTEUJBEARBEARBEIRShAihIAiCIAiCIAhCiUKEUBAEQRAEQRAEoURRbUI4 f/58N2fOHDdr1qxTAtSFOp3udRUEQRAEQSh1jJo41d3wZHf3t9tecb9r2f43C9p3w1Pd3eiovUl6 mDNmtJvY6mY3pt45bvSZfxQioIuJt94c6WZMos4WThvhfuxzuVvT+X+5nzv+byUL2v9j38vdwukj M/pZtQjhvHnz3OzZs93GjRvdkSNH/HcsTiYOHz7s60KdqNvpWldBEARBEIRSx5hJU91ZrTq4eg/2 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 IAglimyE8P8H4sam5is+PfIAAAAASUVORK5CYII= --001a113f8e7e5413480553b1de28-- --001a113f8e7e5413490553b1de29 Content-Type: application/octet-stream; name="Partition_v10.patch" Content-Disposition: attachment; filename="Partition_v10.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j4tazdjn1 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL3N0YXRpYy9qcy9zY2hlbWEuanMgYi93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9zdGF0aWMvanMvc2NoZW1h LmpzCmluZGV4IDBlOTA5OTcuLmVmNDk2ZTcgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3N0YXRpYy9qcy9zY2hl bWEuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvc3RhdGljL2pzL3NjaGVtYS5qcwpAQCAtMTQ1LDYgKzE0NSwxNiBAQCBk ZWZpbmUoJ3BnYWRtaW4ubm9kZS5zY2hlbWEnLCBbCiAgICAgZ3JvdXA6IGdldHRleHQoJ1RhYmxl JyksIG1vZGU6IFsnZWRpdCcsICdjcmVhdGUnXSwKICAgICB0eXBlOiAnc3dpdGNoJywKICAgICBk aXNhYmxlZDogZnVuY3Rpb24obSkgeworICAgICAgLy8gSWYgdGFibGUgaXMgcGFydGl0aW9uZWQg dGFibGUgdGhlbiBkaXNhYmxlZCBpdC4KKyAgICAgIGlmIChtLnRvcCAmJiBtLnRvcC5nZXQoJ2lz X3BhcnRpdGlvbmVkJykpIHsKKyAgICAgICAgLy8gV2UgYWxzbyBuZWVkIHRvIHVuc2V0IHJlc3Qg b2YgYWxsCisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgbS5zZXQo J2F1dG92YWN1dW1fY3VzdG9tJywgZmFsc2UpOworICAgICAgICB9LCAxMCk7CisKKyAgICAgICAg cmV0dXJuIHRydWU7CisgICAgICB9CisKICAgICAgIGlmKCFtLnRvcC5pblNjaGVtYS5hcHBseSh0 aGlzLCBbbV0pKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KQEAgLTQ1OSw2ICs0 NjksMzIgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUuc2NoZW1hJywgWwogICAgICAgICByZXR1cm4g dHJ1ZTsKICAgICAgIH0KICAgICB9KTsKKworICAgIHBnQnJvd3Nlci50YWJsZUNoaWxkVHJlZU5v ZGVIaWVyYXJjaHkgPSBmdW5jdGlvbihpKSB7CisgICAgICB2YXIgaWR4ID0gMCwKKyAgICAgICAg ICByZXMgPSB7fSwKKyAgICAgICAgICB0ID0gcGdCcm93c2VyLnRyZWU7CisKKyAgICAgIGRvIHsK KyAgICAgICAgZCA9IHQuaXRlbURhdGEoaSk7CisgICAgICAgIGlmICgKKyAgICAgICAgICBkLl90 eXBlIGluIHBnQnJvd3Nlci5Ob2RlcyAmJiBwZ0Jyb3dzZXIuTm9kZXNbZC5fdHlwZV0uaGFzSWQK KyAgICAgICAgKSB7CisgICAgICAgICAgaWYgKGQuX3R5cGUgPT09ICdwYXJ0aXRpb24nIHx8IGQu X3R5cGUgPT09ICd0YWJsZScpIHsKKyAgICAgICAgICAgIGlmICghKCd0YWJsZScgaW4gcmVzKSkg eworICAgICAgICAgICAgICByZXNbJ3RhYmxlJ10gPSBfLmV4dGVuZCh7fSwgZCwgeydwcmlvcml0 eSc6IGlkeH0pOworICAgICAgICAgICAgICBpZHggLT0gMTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzW2QuX3R5cGVdID0gXy5leHRlbmQoe30sIGQs IHsncHJpb3JpdHknOiBpZHh9KTsKKyAgICAgICAgICAgIGlkeCAtPSAxOworICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICBpID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51 bGw7CisgICAgICB9IHdoaWxlIChpKTsKKworICAgICAgcmV0dXJuIHJlczsKKyAgICB9OwogICB9 CiAKICAgLy8gU3dpdGNoIENlbGwgd2l0aCBEZXBzIChzcGVjaWZpY2FsbHkgZm9yIHRhYmxlIGNo aWxkcmVuKQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL19f aW5pdF9fLnB5CmluZGV4IGY2ZmE2NWUuLjE3ZDk3MDcgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9f X2luaXRfXy5weQorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVy cy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvX19pbml0X18ucHkKQEAgLTExLDIyICsxMSwxNiBA QAogCiBpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCiBpbXBvcnQgcmUKLWZyb20gZnVuY3Rvb2xz IGltcG9ydCB3cmFwcwogCiBpbXBvcnQgcGdhZG1pbi5icm93c2VyLnNlcnZlcl9ncm91cHMuc2Vy dmVycy5kYXRhYmFzZXMgYXMgZGF0YWJhc2UKLWZyb20gZmxhc2sgaW1wb3J0IHJlbmRlcl90ZW1w bGF0ZSwgcmVxdWVzdCwganNvbmlmeQorZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRl LCByZXF1ZXN0LCBqc29uaWZ5LCB1cmxfZm9yCiBmcm9tIGZsYXNrX2JhYmVsIGltcG9ydCBnZXR0 ZXh0CiBmcm9tIHBnYWRtaW4uYnJvd3Nlci5zZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMuZGF0YWJhc2Vz LnNjaGVtYXMudXRpbHMgXAotICAgIGltcG9ydCBTY2hlbWFDaGlsZE1vZHVsZSwgRGF0YVR5cGVS ZWFkZXIsIFZhY3V1bVNldHRpbmdzLCBcCi0gICAgdHJpZ2dlcl9kZWZpbml0aW9uLCBwYXJzZV9y dWxlX2RlZmluaXRpb24KLWZyb20gcGdhZG1pbi5icm93c2VyLnNlcnZlcl9ncm91cHMuc2VydmVy cy51dGlscyBpbXBvcnQgcGFyc2VfcHJpdl9mcm9tX2RiLCBcCi0gICAgcGFyc2VfcHJpdl90b19k YgotZnJvbSBwZ2FkbWluLmJyb3dzZXIudXRpbHMgaW1wb3J0IFBHQ2hpbGROb2RlVmlldworICAg IGltcG9ydCBTY2hlbWFDaGlsZE1vZHVsZSwgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdz Citmcm9tIHBnYWRtaW4uYnJvd3Nlci5zZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMudXRpbHMgaW1wb3J0 IHBhcnNlX3ByaXZfdG9fZGIKIGZyb20gcGdhZG1pbi51dGlscy5hamF4IGltcG9ydCBtYWtlX2pz b25fcmVzcG9uc2UsIGludGVybmFsX3NlcnZlcl9lcnJvciwgXAogICAgIG1ha2VfcmVzcG9uc2Ug YXMgYWpheF9yZXNwb25zZSwgZ29uZQotZnJvbSBwZ2FkbWluLnV0aWxzLmRyaXZlciBpbXBvcnQg Z2V0X2RyaXZlcgotCi1mcm9tIGNvbmZpZyBpbXBvcnQgUEdfREVGQVVMVF9EUklWRVIKK2Zyb20g LnV0aWxzIGltcG9ydCBCYXNlVGFibGVWaWV3CiAKIAogY2xhc3MgVGFibGVNb2R1bGUoU2NoZW1h Q2hpbGRNb2R1bGUpOgpAQCAtNzksMTEgKzczLDIyIEBAIGNsYXNzIFRhYmxlTW9kdWxlKFNjaGVt YUNoaWxkTW9kdWxlKToKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBkYXRhYmFzZS5EYXRh YmFzZU1vZHVsZS5OT0RFX1RZUEUKIAorICAgIGRlZiBnZXRfb3duX2phdmFzY3JpcHRzKHNlbGYp OgorICAgICAgICBzY3JpcHRzID0gU2NoZW1hQ2hpbGRNb2R1bGUuZ2V0X293bl9qYXZhc2NyaXB0 cyhzZWxmKQorCisgICAgICAgIHNjcmlwdHMuYXBwZW5kKHsKKyAgICAgICAgICAgICduYW1lJzog J3BnYWRtaW4uYnJvd3Nlci50YWJsZS5wYXJ0aXRpb24udXRpbHMnLAorICAgICAgICAgICAgJ3Bh dGgnOiB1cmxfZm9yKCdicm93c2VyLmluZGV4JykgKyAndGFibGUvc3RhdGljL2pzL3BhcnRpdGlv bi51dGlscycsCisgICAgICAgICAgICAnd2hlbic6ICdkYXRhYmFzZScsICdpc190ZW1wbGF0ZSc6 IEZhbHNlCisgICAgICAgIH0pCisKKyAgICAgICAgcmV0dXJuIHNjcmlwdHMKKwogCiBibHVlcHJp bnQgPSBUYWJsZU1vZHVsZShfX25hbWVfXykKIAogCi1jbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5v ZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgorY2xhc3MgVGFibGVWaWV3 KEJhc2VUYWJsZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgIiIi CiAgICAgVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyByb3V0ZXMgZm9y IFRhYmxlIG5vZGUKIApAQCAtOTYsMTEgKzEwMSw2IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxk Tm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAtIFRoaXMg cHJvcGVydHkgZGVmaW5lcyAoaWYgamF2YXNjcmlwdCkgZXhpc3RzIGZvciB0aGlzIG5vZGUuCiAg ICAgICAgIE92ZXJyaWRlIHRoaXMgcHJvcGVydHkgZm9yIHlvdXIgb3duIGxvZ2ljCiAKLSAgICAq IGNoZWNrX3ByZWNvbmRpdGlvbigpCi0gICAgICAtIFRoaXMgZnVuY3Rpb24gd2lsbCBiZWhhdmUg YXMgYSBkZWNvcmF0b3Igd2hpY2ggd2lsbCBjaGVja3MKLSAgICAgICAgZGF0YWJhc2UgY29ubmVj dGlvbiBiZWZvcmUgcnVubmluZyB2aWV3LCBpdCB3aWxsIGFsc28gYXR0YWNoZXMKLSAgICAgICAg bWFuYWdlcixjb25uICYgdGVtcGxhdGVfcGF0aCBwcm9wZXJ0aWVzIHRvIHNlbGYKLQogICAgICog bGlzdCgpCiAgICAgICAtIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBsaXN0IGFsbCB0aGUgVGFi bGUgbm9kZXMgd2l0aGluIHRoYXQKICAgICAgIGNvbGxlY3Rpb24uCkBAIC0xNDksMTAgKzE0OSw2 IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1 dW1TZXR0aW5ncyk6CiAgICAgICAtIFRoaXMgZnVuY3Rpb24gd2lsbCBnZW5lcmF0ZSBkZXBlbmRl bnQgbGlzdCB0byBzaG93IGl0IGluIGRlcGVuZGVudAogICAgICAgICBwYW5lIGZvciB0aGUgc2Vs ZWN0ZWQgbm9kZS4KIAotICAgICogX2Zvcm1hdHRlcihkYXRhLCB0aWQpCi0gICAgICAtIEl0IHdp bGwgcmV0dXJuIGZvcm1hdHRlZCBvdXRwdXQgb2YgcXVlcnkgcmVzdWx0Ci0gICAgICAgIGFzIHBl ciBjbGllbnQgbW9kZWwgZm9ybWF0Ci0KICAgICAqIGdldF90eXBlcyhzZWxmLCBnaWQsIHNpZCwg ZGlkLCBzY2lkKQogICAgICAgLSBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGxpc3Qgb2YgdHlw ZXMgYXZhaWxhYmxlIGZvciBjb2x1bW5zIG5vZGUKICAgICAgICAgdmlhIEFKQVggcmVzcG9uc2UK QEAgLTE3OCwxOSArMTc0LDYgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0 YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAqIGdldF90b2FzdF90YWJsZV92YWN1 dW0oZ2lkLCBzaWQsIGRpZCwgc2NpZD1Ob25lLCB0aWQ9Tm9uZSkKICAgICAgIC0gRmV0Y2ggdGhl IGRlZmF1bHQgdmFsdWVzIGZvciB0b2FzdCB0YWJsZSBhdXRvLXZhY3V1bQogCi0gICAgKiBfY29s dW1uc19mb3JtYXR0ZXIodGlkLCBkYXRhKToKLSAgICAgIC0gSXQgd2lsbCByZXR1cm4gZm9ybWF0 dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1bHQKLSAgICAgICAgYXMgcGVyIGNsaWVudCBtb2RlbCBm b3JtYXQgZm9yIGNvbHVtbiBub2RlCi0KLSAgICAqIF9pbmRleF9jb25zdHJhaW50c19mb3JtYXR0 ZXIoc2VsZiwgZGlkLCB0aWQsIGRhdGEpOgotICAgICAgLSBJdCB3aWxsIHJldHVybiBmb3JtYXR0 ZWQgb3V0cHV0IG9mIHF1ZXJ5IHJlc3VsdAotICAgICAgICBhcyBwZXIgY2xpZW50IG1vZGVsIGZv cm1hdCBmb3IgaW5kZXggY29uc3RyYWludCBub2RlCi0KLSAgICAqIF9jbHR5cGVfZm9ybWF0dGVy KHR5cGUpOiAoc3RhdGljbWV0aG9kKQotICAgICAgLSBXZSBuZWVkIHRvIHJlbW92ZSBbXSBmcm9t IHR5cGUgYW5kIGFwcGVuZCBpdAotICAgICAgICBhZnRlciBsZW5ndGgvcHJlY2lzaW9uIHNvIHdl IHdpbGwgc2VuZCBmbGFnIGZvcgotICAgICAgICBzcWwgdGVtcGxhdGUKLQogICAgICogX3BhcnNl X2Zvcm1hdF9jb2x1bW5zKHNlbGYsIGRhdGEsIG1vZGU9Tm9uZSk6CiAgICAgICAgLSBUaGlzIGZ1 bmN0aW9uIHdpbGwgcGFyc2UgYW5kIHJldHVybiBmb3JtYXR0ZWQgbGlzdCBvZiBjb2x1bW5zCiAg ICAgICAgICBhZGRlZCBieSB1c2VyCkBAIC0yNTIsNzEgKzIzNSwxNiBAQCBjbGFzcyBUYWJsZVZp ZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAg ICAgICAnZ2V0X2FjY2Vzc19tZXRob2RzJzogW3t9LCB7J2dldCc6ICdnZXRfYWNjZXNzX21ldGhv ZHMnfV0sCiAgICAgICAgICdnZXRfb3Blcl9jbGFzcyc6IFt7fSwgeydnZXQnOiAnZ2V0X29wZXJf Y2xhc3MnfV0sCiAgICAgICAgICdnZXRfb3BlcmF0b3InOiBbe30sIHsnZ2V0JzogJ2dldF9vcGVy YXRvcid9XSwKKyAgICAgICAgJ2dldF9hdHRhY2hfdGFibGVzJzogWworICAgICAgICAgICAgeydn ZXQnOiAnZ2V0X2F0dGFjaF90YWJsZXMnfSwKKyAgICAgICAgICAgIHsnZ2V0JzogJ2dldF9hdHRh Y2hfdGFibGVzJ31dLAogICAgICAgICAnc2VsZWN0X3NxbCc6IFt7J2dldCc6ICdzZWxlY3Rfc3Fs J31dLAogICAgICAgICAnaW5zZXJ0X3NxbCc6IFt7J2dldCc6ICdpbnNlcnRfc3FsJ31dLAogICAg ICAgICAndXBkYXRlX3NxbCc6IFt7J2dldCc6ICd1cGRhdGVfc3FsJ31dLAogICAgICAgICAnZGVs ZXRlX3NxbCc6IFt7J2dldCc6ICdkZWxldGVfc3FsJ31dCi0KICAgICB9KQogCi0gICAgZGVmIGNo ZWNrX3ByZWNvbmRpdGlvbihmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRoaXMgZnVuY3Rpb24g d2lsbCBiZWhhdmUgYXMgYSBkZWNvcmF0b3Igd2hpY2ggd2lsbCBjaGVja3MKLSAgICAgICAgZGF0 YWJhc2UgY29ubmVjdGlvbiBiZWZvcmUgcnVubmluZyB2aWV3LCBpdCB3aWxsIGFsc28gYXR0YWNo ZXMKLSAgICAgICAgbWFuYWdlcixjb25uICYgdGVtcGxhdGVfcGF0aCBwcm9wZXJ0aWVzIHRvIHNl bGYKLSAgICAgICAgIiIiCi0KLSAgICAgICAgQHdyYXBzKGYpCi0gICAgICAgIGRlZiB3cmFwKCph cmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICAgICAjIEhlcmUgYXJnc1swXSB3aWxsIGhvbGQgc2Vs ZiAmIGt3YXJncyB3aWxsIGhvbGQgZ2lkLHNpZCxkaWQKLSAgICAgICAgICAgIHNlbGYgPSBhcmdz WzBdCi0gICAgICAgICAgICBkcml2ZXIgPSBnZXRfZHJpdmVyKFBHX0RFRkFVTFRfRFJJVkVSKQot ICAgICAgICAgICAgZGlkID0ga3dhcmdzWydkaWQnXQotICAgICAgICAgICAgc2VsZi5tYW5hZ2Vy ID0gZHJpdmVyLmNvbm5lY3Rpb25fbWFuYWdlcihrd2FyZ3NbJ3NpZCddKQotICAgICAgICAgICAg c2VsZi5jb25uID0gc2VsZi5tYW5hZ2VyLmNvbm5lY3Rpb24oZGlkPWt3YXJnc1snZGlkJ10pCi0g ICAgICAgICAgICBzZWxmLnF0SWRlbnQgPSBkcml2ZXIucXRJZGVudAotICAgICAgICAgICAgc2Vs Zi5xdFR5cGVJZGVudCA9IGRyaXZlci5xdFR5cGVJZGVudAotICAgICAgICAgICAgIyBXZSBuZWVk IGRhdGxhc3RzeXNvaWQgdG8gY2hlY2sgaWYgY3VycmVudCB0YWJsZSBpcyBzeXN0ZW0gdGFibGUK LSAgICAgICAgICAgIHNlbGYuZGF0bGFzdHN5c29pZCA9IHNlbGYubWFuYWdlci5kYl9pbmZvWwot ICAgICAgICAgICAgICAgIGRpZAotICAgICAgICAgICAgXVsnZGF0bGFzdHN5c29pZCddIGlmIHNl bGYubWFuYWdlci5kYl9pbmZvIGlzIG5vdCBOb25lIGFuZCBcCi0gICAgICAgICAgICAgICAgZGlk IGluIHNlbGYubWFuYWdlci5kYl9pbmZvIGVsc2UgMAotCi0gICAgICAgICAgICB2ZXIgPSBzZWxm Lm1hbmFnZXIudmVyc2lvbgotICAgICAgICAgICAgIyBTZXQgdGhlIHRlbXBsYXRlIHBhdGggZm9y IHRoZSBTUUwgc2NyaXB0cwotICAgICAgICAgICAgc2VsZi50ZW1wbGF0ZV9wYXRoID0gJ3RhYmxl L3NxbC8jezB9IycuZm9ybWF0KHZlcikKLQotICAgICAgICAgICAgIyBUZW1wbGF0ZSBmb3IgQ29s dW1uICxjaGVjayBjb25zdHJhaW50IGFuZCBleGNsdXNpb24gY29uc3RyYWludCBub2RlCi0gICAg ICAgICAgICBzZWxmLmNvbHVtbl90ZW1wbGF0ZV9wYXRoID0gJ2NvbHVtbi9zcWwvI3swfSMnLmZv cm1hdCh2ZXIpCi0gICAgICAgICAgICBzZWxmLmNoZWNrX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0 aCA9ICdjaGVja19jb25zdHJhaW50L3NxbC8jezB9IycuZm9ybWF0KHZlcikKLSAgICAgICAgICAg IHNlbGYuZXhjbHVzaW9uX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCA9ICdleGNsdXNpb25fY29u c3RyYWludC9zcWwvI3swfSMnLmZvcm1hdCh2ZXIpCi0KLSAgICAgICAgICAgICMgVGVtcGxhdGUg Zm9yIFBLICYgVW5pcXVlIGNvbnN0cmFpbnQgbm9kZQotICAgICAgICAgICAgc2VsZi5pbmRleF9j b25zdHJhaW50X3RlbXBsYXRlX3BhdGggPSAnaW5kZXhfY29uc3RyYWludC9zcWwnCi0KLSAgICAg ICAgICAgICMgVGVtcGxhdGUgZm9yIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgbm9kZQotICAgICAg ICAgICAgc2VsZi5mb3JlaWduX2tleV90ZW1wbGF0ZV9wYXRoID0gJ2ZvcmVpZ25fa2V5L3NxbC8j ezB9IycuZm9ybWF0KHZlcikKLQotICAgICAgICAgICAgIyBUZW1wbGF0ZSBmb3IgaW5kZXggbm9k ZQotICAgICAgICAgICAgc2VsZi5pbmRleF90ZW1wbGF0ZV9wYXRoID0gJ2luZGV4L3NxbC8jezB9 IycuZm9ybWF0KHZlcikKLQotICAgICAgICAgICAgIyBUZW1wbGF0ZSBmb3IgdHJpZ2dlciBub2Rl Ci0gICAgICAgICAgICBzZWxmLnRyaWdnZXJfdGVtcGxhdGVfcGF0aCA9ICd0cmlnZ2VyL3NxbC8j ezB9IycuZm9ybWF0KHZlcikKLQotICAgICAgICAgICAgIyBUZW1wbGF0ZSBmb3IgcnVsZXMgbm9k ZQotICAgICAgICAgICAgc2VsZi5ydWxlc190ZW1wbGF0ZV9wYXRoID0gJ3J1bGVzL3NxbCcKLQot ICAgICAgICAgICAgIyBTdXBwb3J0ZWQgQUNMIGZvciB0YWJsZQotICAgICAgICAgICAgc2VsZi5h Y2wgPSBbJ2EnLCAncicsICd3JywgJ2QnLCAnRCcsICd4JywgJ3QnXQotCi0gICAgICAgICAgICAj IFN1cHBvcnRlZCBBQ0wgZm9yIGNvbHVtbnMKLSAgICAgICAgICAgIHNlbGYuY29sdW1uX2FjbCA9 IFsnYScsICdyJywgJ3cnLCAneCddCi0KLSAgICAgICAgICAgIHJldHVybiBmKCphcmdzLCAqKmt3 YXJncykKLQotICAgICAgICByZXR1cm4gd3JhcAotCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgor ICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBsaXN0KHNlbGYs IGdpZCwgc2lkLCBkaWQsIHNjaWQpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBmdW5jdGlv biBpcyB1c2VkIHRvIGxpc3QgYWxsIHRoZSB0YWJsZSBub2RlcyB3aXRoaW4gdGhhdCBjb2xsZWN0 aW9uLgpAQCAtMzMwLDEwICsyNTgsMTEgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmll dywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgUmV0dXJuczoKICAg ICAgICAgICAgIEpTT04gb2YgYXZhaWxhYmxlIHRhYmxlIG5vZGVzCiAgICAgICAgICIiIgotICAg ICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwn XSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWQ9ZGlkLCBzY2lkPXNjaWQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5 c29pZCkKKyAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgIi8iLmpv aW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAg ICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLAorICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxm LmRhdGxhc3RzeXNvaWQKKyAgICAgICAgKQogICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29u bi5leGVjdXRlX2RpY3QoU1FMKQogCiAgICAgICAgIGlmIG5vdCBzdGF0dXM6CkBAIC0zNDMsNyAr MjcyLDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIs IFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgICAgIHN0YXR1cz0yMDAKICAgICAgICAgKQogCi0g ICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRp dGlvbgogICAgIGRlZiBub2RlKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCk6CiAgICAg ICAgICIiIgogICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbGlzdCBhbGwgdGhlIHRh YmxlIG5vZGVzIHdpdGhpbiB0aGF0IGNvbGxlY3Rpb24uCkBAIC0zNTksOSArMjg4LDEwIEBAIGNs YXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0 aW5ncyk6CiAgICAgICAgICAgICBKU09OIG9mIGF2YWlsYWJsZSB0YWJsZSBub2RlcwogICAgICAg ICAiIiIKICAgICAgICAgcmVzID0gW10KLSAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ25vZGVzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNjaWQ9c2NpZCwgdGlkPXRpZCkKKyAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAg ICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ25vZGVzLnNxbCdd KSwKKyAgICAgICAgICAgIHNjaWQ9c2NpZCwgdGlkPXRpZAorICAgICAgICApCiAgICAgICAgIHN0 YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQogICAgICAgICBpZiBu b3Qgc3RhdHVzOgogICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJv cm1zZz1yc2V0KQpAQCAtMzcyLDkgKzMwMiwxMCBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5v ZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgICAg IHJzZXRbJ3Jvd3MnXVswXVsnb2lkJ10sCiAgICAgICAgICAgICAgICAgc2NpZCwKICAgICAgICAg ICAgICAgICByc2V0Wydyb3dzJ11bMF1bJ25hbWUnXSwKLSAgICAgICAgICAgICAgICBpY29uPSJp Y29uLXRhYmxlIiwKKyAgICAgICAgICAgICAgICBpY29uPSJpY29uLXBhcnRpdGlvbiIgaWYgJ2lz X3BhcnRpdGlvbmVkJyBpbiByc2V0Wydyb3dzJ11bMF0gYW5kIHJzZXRbJ3Jvd3MnXVswXVsnaXNf cGFydGl0aW9uZWQnXSBlbHNlICJpY29uLXRhYmxlIiwKICAgICAgICAgICAgICAgICB0aWdnZXJf Y291bnQ9cnNldFsncm93cyddWzBdWyd0cmlnZ2VyY291bnQnXSwKLSAgICAgICAgICAgICAgICBo YXNfZW5hYmxlX3RyaWdnZXJzPXJzZXRbJ3Jvd3MnXVswXVsnaGFzX2VuYWJsZV90cmlnZ2Vycydd CisgICAgICAgICAgICAgICAgaGFzX2VuYWJsZV90cmlnZ2Vycz1yc2V0Wydyb3dzJ11bMF1bJ2hh c19lbmFibGVfdHJpZ2dlcnMnXSwKKyAgICAgICAgICAgICAgICBpc19wYXJ0aXRpb25lZD1yc2V0 Wydyb3dzJ11bMF1bJ2lzX3BhcnRpdGlvbmVkJ10gaWYgJ2lzX3BhcnRpdGlvbmVkJyBpbiByc2V0 Wydyb3dzJ11bMF0gZWxzZSBGYWxzZQogICAgICAgICAgICAgKQogCiAgICAgICAgIHJldHVybiBt YWtlX2pzb25fcmVzcG9uc2UoCkBAIC0zODIsOCArMzEzLDcgQEAgY2xhc3MgVGFibGVWaWV3KFBH Q2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAg ICAgIHN0YXR1cz0yMDAKICAgICAgICAgKQogCi0KLSAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisg ICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIG5vZGVzKHNlbGYs IGdpZCwgc2lkLCBkaWQsIHNjaWQpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBmdW5jdGlv biBpcyB1c2VkIHRvIGxpc3QgYWxsIHRoZSB0YWJsZSBub2RlcyB3aXRoaW4gdGhhdCBjb2xsZWN0 aW9uLgpAQCAtMzk4LDkgKzMyOCwxMCBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3 LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgSlNPTiBvZiBh dmFpbGFibGUgdGFibGUgbm9kZXMKICAgICAgICAgIiIiCiAgICAgICAgIHJlcyA9IFtdCi0gICAg ICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub2Rlcy5zcWwnXSksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2lkPXNjaWQpCisgICAgICAgIFNRTCA9IHJl bmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRl X3BhdGgsICdub2Rlcy5zcWwnXSksCisgICAgICAgICAgICBzY2lkPXNjaWQKKyAgICAgICAgKQog ICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKICAg ICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9cnNldCkKQEAgLTQxMSw5ICszNDIsMTAgQEAgY2xhc3MgVGFibGVWaWV3 KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAg ICAgICAgICAgICAgICAgcm93WydvaWQnXSwKICAgICAgICAgICAgICAgICAgICAgc2NpZCwKICAg ICAgICAgICAgICAgICAgICAgcm93WyduYW1lJ10sCi0gICAgICAgICAgICAgICAgICAgIGljb249 Imljb24tdGFibGUiLAorICAgICAgICAgICAgICAgICAgICBpY29uPSJpY29uLXBhcnRpdGlvbiIg aWYgJ2lzX3BhcnRpdGlvbmVkJyBpbiByb3cgYW5kIHJvd1snaXNfcGFydGl0aW9uZWQnXSBlbHNl ICJpY29uLXRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgdGlnZ2VyX2NvdW50PXJvd1sndHJp Z2dlcmNvdW50J10sCi0gICAgICAgICAgICAgICAgICAgIGhhc19lbmFibGVfdHJpZ2dlcnM9cm93 WydoYXNfZW5hYmxlX3RyaWdnZXJzJ10KKyAgICAgICAgICAgICAgICAgICAgaGFzX2VuYWJsZV90 cmlnZ2Vycz1yb3dbJ2hhc19lbmFibGVfdHJpZ2dlcnMnXSwKKyAgICAgICAgICAgICAgICAgICAg aXNfcGFydGl0aW9uZWQ9cm93Wydpc19wYXJ0aXRpb25lZCddIGlmICdpc19wYXJ0aXRpb25lZCcg aW4gcm93IGVsc2UgRmFsc2UKICAgICAgICAgICAgICAgICApKQogCiAgICAgICAgIHJldHVybiBt YWtlX2pzb25fcmVzcG9uc2UoCkBAIC00MjEsNyArMzUzLDcgQEAgY2xhc3MgVGFibGVWaWV3KFBH Q2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAg ICAgIHN0YXR1cz0yMDAKICAgICAgICAgKQogCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAg IEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBnZXRfYWxsX3RhYmxl cyhzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQ9Tm9uZSk6CiAgICAgICAgICIiIgogICAg ICAgICBBcmdzOgpAQCAtNDM1LDkgKzM2NywxMiBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5v ZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgUmV0 dXJucyB0aGUgbGl0cyBvZiB0YWJsZXMgcmVxdWlyZWQgZm9yIGNvbnN0cmFpbnRzLgogICAgICAg ICAiIiIKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdnZXRfdGFibGVzX2Zvcl9jb25zdHJhaW50cy5zcWwnXSksCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd19zeXNvYmo9c2VsZi5ibHVlcHJpbnQu c2hvd19zeXN0ZW1fb2JqZWN0cykKKyAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgK KyAgICAgICAgICAgICAgICAiLyIuam9pbihbCisgICAgICAgICAgICAgICAgICAgIHNlbGYudGFi bGVfdGVtcGxhdGVfcGF0aCwgJ2dldF90YWJsZXNfZm9yX2NvbnN0cmFpbnRzLnNxbCcKKyAgICAg ICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICBzaG93X3N5c29iaj1zZWxmLmJsdWVwcmlu dC5zaG93X3N5c3RlbV9vYmplY3RzCisgICAgICAgICAgICApCiAKICAgICAgICAgICAgIHN0YXR1 cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCiAKQEAgLTQ1Miw3ICszODcsNyBA QCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVt U2V0dGluZ3MpOgogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICBy ZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0cihlKSkKIAotICAgIEBjaGVj a19wcmVjb25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KICAg ICBkZWYgZ2V0X3RhYmxlX3ZhY3V1bShzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkPU5vbmUsIHRp ZD1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIEZldGNoIHRoZSBkZWZhdWx0IHZhbHVlcyBm b3IgdGFibGUgYXV0by12YWN1dW0KQEAgLTQ2OCw3ICs0MDMsNyBAQCBjbGFzcyBUYWJsZVZpZXco UEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAg ICAgICAgc3RhdHVzPTIwMAogICAgICAgICApCiAKLSAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisg ICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIGdldF90b2FzdF90 YWJsZV92YWN1dW0oc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZD1Ob25lLCB0aWQ9Tm9uZSk6CiAg ICAgICAgICIiIgogICAgICAgICBGZXRjaCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRvYXN0IHRh YmxlIGF1dG8tdmFjdXVtCkBAIC00ODQsNyArNDE5LDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hp bGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgICAg IHN0YXR1cz0yMDAKICAgICAgICAgKQogCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBC YXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBnZXRfYWNjZXNzX21ldGhv ZHMoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkPU5vbmUpOgogICAgICAgICAiIiIKICAg ICAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFjY2VzcyBtZXRob2RzLgpAQCAtNTAxLDkgKzQz NiwxMCBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwg VmFjdXVtU2V0dGluZ3MpOgogCiAgICAgICAgICIiIgogICAgICAgICByZXMgPSBbeydsYWJlbCc6 ICcnLCAndmFsdWUnOiAnJ31dCi0gICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgKLSAgICAg ICAgICAgICIvIi5qb2luKFtzZWxmLmV4Y2x1c2lvbl9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgs Ci0gICAgICAgICAgICAgICAgICAgICAgJ2dldF9hY2Nlc3NfbWV0aG9kcy5zcWwnXSkpCisgICAg ICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbCisgICAgICAgICAgICBzZWxmLmV4 Y2x1c2lvbl9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsICdnZXRfYWNjZXNzX21ldGhvZHMuc3Fs JworICAgICAgICBdKSkKKwogICAgICAgICBzdGF0dXMsIHJlc3QgPSBzZWxmLmNvbm4uZXhlY3V0 ZV8yZGFycmF5KHNxbCkKIAogICAgICAgICBpZiBub3Qgc3RhdHVzOgpAQCAtNTE4LDcgKzQ1NCw3 IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1 dW1TZXR0aW5ncyk6CiAgICAgICAgICAgICBzdGF0dXM9MjAwCiAgICAgICAgICkKIAotICAgIEBj aGVja19wcmVjb25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24K ICAgICBkZWYgZ2V0X29wZXJfY2xhc3Moc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkPU5v bmUpOgogICAgICAgICAiIiIKIApAQCAtNTM3LDkgKzQ3MywxMiBAQCBjbGFzcyBUYWJsZVZpZXco UEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAg ICB0cnk6CiAgICAgICAgICAgICBpZiBkYXRhIGFuZCAnaW5kZXh0eXBlJyBpbiBkYXRhOgogICAg ICAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKLSAgICAgICAgICAgICAgICAgICAg Ii8iLmpvaW4oW3NlbGYuZXhjbHVzaW9uX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfb3Blcl9jbGFzcy5zcWwnXSksCi0gICAgICAg ICAgICAgICAgICAgIGluZGV4dHlwZT1kYXRhWydpbmRleHR5cGUnXSkKKyAgICAgICAgICAgICAg ICAgICAgIi8iLmpvaW4oWworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leGNsdXNpb25f Y29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9v cGVyX2NsYXNzLnNxbCcKKyAgICAgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAg ICAgIGluZGV4dHlwZT1kYXRhWydpbmRleHR5cGUnXQorICAgICAgICAgICAgICAgICkKIAogICAg ICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwp CiAKQEAgLTU1NSw3ICs0OTQsNyBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBE YXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICBleGNlcHQgRXhjZXB0aW9u IGFzIGU6CiAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXN0cihlKSkKIAotICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5j aGVja19wcmVjb25kaXRpb24KICAgICBkZWYgZ2V0X29wZXJhdG9yKHNlbGYsIGdpZCwgc2lkLCBk aWQsIHNjaWQsIHRpZD1Ob25lKToKICAgICAgICAgIiIiCiAKQEAgLTU3NCwxMCArNTEzLDEzIEBA IGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1T ZXR0aW5ncyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIGRhdGEgYW5kICdjb2xfdHlw ZScgaW4gZGF0YToKICAgICAgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCi0gICAg ICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLmV4Y2x1c2lvbl9jb25zdHJhaW50X3RlbXBs YXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X29wZXJhdG9yLnNx bCddKSwKKyAgICAgICAgICAgICAgICAgICAgIi8iLmpvaW4oWworICAgICAgICAgICAgICAgICAg ICAgICAgc2VsZi5leGNsdXNpb25fY29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAg ICAgICAgICAgICAgICAgJ2dldF9vcGVyYXRvci5zcWwnCisgICAgICAgICAgICAgICAgICAgIF0p LAogICAgICAgICAgICAgICAgICAgICB0eXBlPWRhdGFbJ2NvbF90eXBlJ10sCi0gICAgICAgICAg ICAgICAgICAgIHNob3dfc3lzb2JqPXNlbGYuYmx1ZXByaW50LnNob3dfc3lzdGVtX29iamVjdHMp CisgICAgICAgICAgICAgICAgICAgIHNob3dfc3lzb2JqPXNlbGYuYmx1ZXByaW50LnNob3dfc3lz dGVtX29iamVjdHMKKyAgICAgICAgICAgICAgICApCiAKICAgICAgICAgICAgICAgICBzdGF0dXMs IHJlcyA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQogCkBAIC01OTMsNTA2ICs1MzUs NyBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFj dXVtU2V0dGluZ3MpOgogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAg ICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0cihlKSkKIAotICAgIGRl ZiBfY29sdW1uc19mb3JtYXR0ZXIoc2VsZiwgdGlkLCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAg ICAgIEFyZ3M6Ci0gICAgICAgICAgICB0aWQ6IFRhYmxlIE9JRAotICAgICAgICAgICAgZGF0YTog ZGljdCBvZiBxdWVyeSByZXN1bHQKLQotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgSXQg d2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1bHQKLSAgICAgICAgICAg IGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0IGZvciBjb2x1bW4gbm9kZQotICAgICAgICAiIiIK LSAgICAgICAgZm9yIGNvbHVtbiBpbiBkYXRhWydjb2x1bW5zJ106Ci0KLSAgICAgICAgICAgICMg V2UgbmVlZCB0byBmb3JtYXQgdmFyaWFibGVzIGFjY29yZGluZyB0byBjbGllbnQganMgY29sbGVj dGlvbgotICAgICAgICAgICAgaWYgJ2F0dG9wdGlvbnMnIGluIGNvbHVtbiBhbmQgY29sdW1uWydh dHRvcHRpb25zJ10gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc3Bjb3B0aW9ucyA9IFtd Ci0gICAgICAgICAgICAgICAgZm9yIHNwY29wdGlvbiBpbiBjb2x1bW5bJ2F0dG9wdGlvbnMnXToK LSAgICAgICAgICAgICAgICAgICAgaywgdiA9IHNwY29wdGlvbi5zcGxpdCgnPScpCi0gICAgICAg ICAgICAgICAgICAgIHNwY29wdGlvbnMuYXBwZW5kKHsnbmFtZSc6IGssICd2YWx1ZSc6IHZ9KQot Ci0gICAgICAgICAgICAgICAgY29sdW1uWydhdHRvcHRpb25zJ10gPSBzcGNvcHRpb25zCi0KLSAg ICAgICAgICAgICMgTmVlZCB0byBmb3JtYXQgc2VjdXJpdHkgbGFiZWxzIGFjY29yZGluZyB0byBj bGllbnQganMgY29sbGVjdGlvbgotICAgICAgICAgICAgaWYgJ3NlY2xhYmVscycgaW4gY29sdW1u IGFuZCBjb2x1bW5bJ3NlY2xhYmVscyddIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNl Y2xhYmVscyA9IFtdCi0gICAgICAgICAgICAgICAgZm9yIHNlY2xibHMgaW4gY29sdW1uWydzZWNs YWJlbHMnXToKLSAgICAgICAgICAgICAgICAgICAgaywgdiA9IHNlY2xibHMuc3BsaXQoJz0nKQot ICAgICAgICAgICAgICAgICAgICBzZWNsYWJlbHMuYXBwZW5kKHsncHJvdmlkZXInOiBrLCAnbGFi ZWwnOiB2fSkKLQotICAgICAgICAgICAgICAgIGNvbHVtblsnc2VjbGFiZWxzJ10gPSBzZWNsYWJl bHMKLQotICAgICAgICAgICAgaWYgJ2F0dG51bScgaW4gY29sdW1uIGFuZCBjb2x1bW5bJ2F0dG51 bSddIGlzIG5vdCBOb25lIGFuZCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1u WydhdHRudW0nXSA+IDA6Ci0gICAgICAgICAgICAgICAgIyBXZSBuZWVkIHRvIHBhcnNlICYgY29u dmVydCBBQ0wgY29taW5nIGZyb20gZGF0YWJhc2UgdG8ganNvbiBmb3JtYXQKLSAgICAgICAgICAg ICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuY29sdW1uX3RlbXBsYXRl X3BhdGgsICdhY2wuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0aWQ9dGlkLCBjbGlkPWNvbHVtblsnYXR0bnVtJ10pCi0gICAgICAgICAgICAgICAgc3RhdHVz LCBhY2wgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKLQotICAgICAgICAgICAgICAgIGlm IG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9YWNsKQotCi0gICAgICAgICAgICAgICAgIyBXZSB3aWxsIHNldCBnZXQg cHJpdmlsZWdlcyBmcm9tIGFjbCBzcWwgc28gd2UgZG9uJ3QgbmVlZAotICAgICAgICAgICAgICAg ICMgaXQgZnJvbSBwcm9wZXJ0aWVzIHNxbAotICAgICAgICAgICAgICAgIGNvbHVtblsnYXR0YWNs J10gPSBbXQotCi0gICAgICAgICAgICAgICAgZm9yIHJvdyBpbiBhY2xbJ3Jvd3MnXToKLSAgICAg ICAgICAgICAgICAgICAgcHJpdiA9IHBhcnNlX3ByaXZfZnJvbV9kYihyb3cpCi0gICAgICAgICAg ICAgICAgICAgIGNvbHVtbi5zZXRkZWZhdWx0KHJvd1snZGVmdHlwZSddLCBbXSkuYXBwZW5kKHBy aXYpCi0KLSAgICAgICAgICAgICAgICAjIHdlIGFyZSByZWNlaXZpbmcgcmVxdWVzdCB3aGVuIGlu IGVkaXQgbW9kZQotICAgICAgICAgICAgICAgICMgd2Ugd2lsbCBzZW5kIGZpbHRlcmVkIHR5cGVz IHJlbGF0ZWQgdG8gY3VycmVudCB0eXBlCi0gICAgICAgICAgICAgICAgcHJlc2VudF90eXBlID0g Y29sdW1uWydjbHR5cGUnXQotCi0gICAgICAgICAgICAgICAgdHlwZV9pZCA9IGNvbHVtblsnYXR0 dHlwaWQnXQotCi0gICAgICAgICAgICAgICAgZnVsbHR5cGUgPSBzZWxmLmdldF9mdWxsX3R5cGUo Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtblsndHlwbnNwbmFtZSddLCBjb2x1bW5bJ3R5cG5h bWUnXSwKLSAgICAgICAgICAgICAgICAgICAgY29sdW1uWydpc2R1cCddLCBjb2x1bW5bJ2F0dG5k aW1zJ10sIGNvbHVtblsnYXR0dHlwbW9kJ10KLSAgICAgICAgICAgICAgICApCi0KLSAgICAgICAg ICAgICAgICBsZW5ndGggPSBGYWxzZQotICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IEZhbHNl Ci0gICAgICAgICAgICAgICAgaWYgJ2VsZW1vaWQnIGluIGNvbHVtbjoKLSAgICAgICAgICAgICAg ICAgICAgbGVuZ3RoLCBwcmVjaXNpb24sIHR5cGV2YWwgPSBzZWxmLmdldF9sZW5ndGhfcHJlY2lz aW9uKGNvbHVtblsnZWxlbW9pZCddKQotCi0gICAgICAgICAgICAgICAgIyBTZXQgbGVuZ3RoIGFu ZCBwcmVjaXNpb24gdG8gTm9uZQotICAgICAgICAgICAgICAgIGNvbHVtblsnYXR0bGVuJ10gPSBO b25lCi0gICAgICAgICAgICAgICAgY29sdW1uWydhdHRwcmVjaXNpb24nXSA9IE5vbmUKLQotICAg ICAgICAgICAgICAgICMgSWYgd2UgaGF2ZSBsZW5ndGggJiBwcmVjaXNpb24gYm90aAotICAgICAg ICAgICAgICAgIGlmIGxlbmd0aCBhbmQgcHJlY2lzaW9uOgotICAgICAgICAgICAgICAgICAgICBt YXRjaE9iaiA9IHJlLnNlYXJjaChyJyhcZCspLChcZCspJywgZnVsbHR5cGUpCi0gICAgICAgICAg ICAgICAgICAgIGlmIG1hdGNoT2JqOgotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uWydh dHRsZW4nXSA9IG1hdGNoT2JqLmdyb3VwKDEpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1 bW5bJ2F0dHByZWNpc2lvbiddID0gbWF0Y2hPYmouZ3JvdXAoMikKLSAgICAgICAgICAgICAgICBl bGlmIGxlbmd0aDoKLSAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBoYXZlIGxlbmd0aCBvbmx5 Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoT2JqID0gcmUuc2VhcmNoKHInKFxkKyknLCBmdWxs dHlwZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2hPYmo6Ci0gICAgICAgICAgICAgICAg ICAgICAgICBjb2x1bW5bJ2F0dGxlbiddID0gbWF0Y2hPYmouZ3JvdXAoMSkKLSAgICAgICAgICAg ICAgICAgICAgICAgIGNvbHVtblsnYXR0cHJlY2lzaW9uJ10gPSBOb25lCi0KLQotICAgICAgICAg ICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5jb2x1bW5fdGVtcGxh dGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdpc19yZWZlcmVuY2VkLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGlkPXRpZCwgY2xpZD1jb2x1bW5bJ2F0dG51bSddKQotCi0gICAgICAgICAgICAgICAg c3RhdHVzLCBpc19yZWZlcmVuY2UgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoU1FMKQotCi0g ICAgICAgICAgICAgICAgZWRpdF90eXBlc19saXN0ID0gbGlzdCgpCi0gICAgICAgICAgICAgICAg IyBXZSB3aWxsIG5lZWQgcHJlc2VudCB0eXBlIGluIGVkaXQgbW9kZQotCi0gICAgICAgICAgICAg ICAgaWYgY29sdW1uWyd0eXBuc3BuYW1lJ10gPT0gInBnX2NhdGFsb2ciIG9yIGNvbHVtblsndHlw bnNwbmFtZSddID09ICJwdWJsaWMiOgotICAgICAgICAgICAgICAgICAgICBlZGl0X3R5cGVzX2xp c3QuYXBwZW5kKHByZXNlbnRfdHlwZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAg ICAgICAgICAgICB0ID0gc2VsZi5xdFR5cGVJZGVudChzZWxmLmNvbm4sIGNvbHVtblsndHlwbnNw bmFtZSddLCBwcmVzZW50X3R5cGUpCi0gICAgICAgICAgICAgICAgICAgIGVkaXRfdHlwZXNfbGlz dC5hcHBlbmQodCkKLSAgICAgICAgICAgICAgICAgICAgY29sdW1uWydjbHR5cGUnXSA9IHQKLQot ICAgICAgICAgICAgICAgIGlmIGludChpc19yZWZlcmVuY2UpID09IDA6Ci0gICAgICAgICAgICAg ICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5jb2x1bW5fdGVtcGxh dGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnZWRpdF9tb2RlX3R5cGVzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHR5cGVfaWQ9dHlwZV9pZCkKLSAgICAgICAgICAgICAgICAgICAgc3Rh dHVzLCByc2V0ID0gc2VsZi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCi0KLSAgICAgICAgICAg ICAgICAgICAgZm9yIHJvdyBpbiByc2V0Wydyb3dzJ106Ci0gICAgICAgICAgICAgICAgICAgICAg ICBlZGl0X3R5cGVzX2xpc3QuYXBwZW5kKHJvd1sndHlwbmFtZSddKQotICAgICAgICAgICAgICAg IGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGVkaXRfdHlwZXNfbGlzdC5hcHBlbmQocHJlc2Vu dF90eXBlKQotCi0gICAgICAgICAgICAgICAgY29sdW1uWydlZGl0X3R5cGVzJ10gPSBlZGl0X3R5 cGVzX2xpc3QKLSAgICAgICAgICAgICAgICBjb2x1bW5bJ2NsdHlwZSddID0gRGF0YVR5cGVSZWFk ZXIucGFyc2VfdHlwZV9uYW1lKGNvbHVtblsnY2x0eXBlJ10pCi0KLSAgICAgICAgICAgICAgICBp ZiAnaW5ka2V5JyBpbiBjb2x1bW46Ci0gICAgICAgICAgICAgICAgICAgICMgQ3VycmVudCBjb2x1 bW4KLSAgICAgICAgICAgICAgICAgICAgYXR0bnVtID0gc3RyKGNvbHVtblsnYXR0bnVtJ10pCi0K LSAgICAgICAgICAgICAgICAgICAgIyBTaW5nbGUvTGlzdCBvZiBwcmltYXJ5IGtleSBjb2x1bW4o cykKLSAgICAgICAgICAgICAgICAgICAgaW5ka2V5ID0gc3RyKGNvbHVtblsnaW5ka2V5J10pCi0K LSAgICAgICAgICAgICAgICAgICAgIyBXZSB3aWxsIGNoZWNrIGlmIGNvbHVtbiBpcyBpbiBwcmlt YXJ5IGNvbHVtbihzKQotICAgICAgICAgICAgICAgICAgICBpZiBhdHRudW0gaW4gaW5ka2V5LnNw bGl0KCIgIik6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5bJ2lzX3ByaW1hcnlfa2V5 J10gPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg ICAgICBjb2x1bW5bJ2lzX3ByaW1hcnlfa2V5J10gPSBGYWxzZQotCi0gICAgICAgIHJldHVybiBk YXRhCi0KLSAgICBkZWYgX2luZGV4X2NvbnN0cmFpbnRzX2Zvcm1hdHRlcihzZWxmLCBkaWQsIHRp ZCwgZGF0YSk6Ci0gICAgICAgICIiIgotICAgICAgICBBcmdzOgotICAgICAgICAgICAgdGlkOiBU YWJsZSBPSUQKLSAgICAgICAgICAgIGRhdGE6IGRpY3Qgb2YgcXVlcnkgcmVzdWx0Ci0KLSAgICAg ICAgUmV0dXJuczoKLSAgICAgICAgICAgIEl0IHdpbGwgcmV0dXJuIGZvcm1hdHRlZCBvdXRwdXQg b2YgcXVlcnkgcmVzdWx0Ci0gICAgICAgICAgICBhcyBwZXIgY2xpZW50IG1vZGVsIGZvcm1hdCBm b3IgaW5kZXggY29uc3RyYWludCBub2RlCi0gICAgICAgICIiIgotCi0gICAgICAgICMgV2Ugd2ls bCBmZXRjaCBhbGwgdGhlIGluZGV4IGNvbnN0cmFpbnRzIGZvciB0aGUgdGFibGUKLSAgICAgICAg aW5kZXhfY29uc3RyYWludHMgPSB7Ci0gICAgICAgICAgICAncCc6ICdwcmltYXJ5X2tleScsICd1 JzogJ3VuaXF1ZV9jb25zdHJhaW50JwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIGN0eXBlIGlu IGluZGV4X2NvbnN0cmFpbnRzLmtleXMoKToKLSAgICAgICAgICAgIGRhdGFbaW5kZXhfY29uc3Ry YWludHNbY3R5cGVdXSA9IFtdCi0KLSAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgi LyIuam9pbihbc2VsZi5pbmRleF9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWQ9ZGlkLCB0aWQ9dGlkLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRfdHlwZT1jdHlwZSkKLSAgICAg ICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCi0KLSAgICAg ICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3Nl cnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCi0KLSAgICAgICAgICAgIGZvciByb3cgaW4gcmVzWydy b3dzJ106Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcm93Ci0gICAgICAgICAgICAgICAgc3Fs ID0gcmVuZGVyX3RlbXBsYXRlKAotICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5p bmRleF9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnZ2V0X2NvbnN0cmFpbnRfY29scy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgIGNp ZD1yb3dbJ29pZCddLAotICAgICAgICAgICAgICAgICAgICBjb2xjbnQ9cm93WydpbmRuYXR0cydd KQotICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChz cWwpCi0KLSAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAgICAg ICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKLQotICAgICAgICAg ICAgICAgIGNvbHVtbnMgPSBbXQotICAgICAgICAgICAgICAgIGZvciByIGluIHJlc1sncm93cydd OgotICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLmFwcGVuZCh7ImNvbHVtbiI6IHJbJ2NvbHVt biddLnN0cmlwKCciJyl9KQotCi0gICAgICAgICAgICAgICAgcmVzdWx0Wydjb2x1bW5zJ10gPSBj b2x1bW5zCi0KLSAgICAgICAgICAgICAgICAjIElmIG5vdCBleGlzdHMgdGhlbiBjcmVhdGUgbGlz dCBhbmQvb3IgYXBwZW5kIGludG8KLSAgICAgICAgICAgICAgICAjIGV4aXN0aW5nIGxpc3QgWyBB ZGRpbmcgaW50byBtYWluIGRhdGEgZGljdF0KLSAgICAgICAgICAgICAgICBkYXRhLnNldGRlZmF1 bHQoaW5kZXhfY29uc3RyYWludHNbY3R5cGVdLCBbXSkuYXBwZW5kKHJlc3VsdCkKLQotICAgICAg ICByZXR1cm4gZGF0YQotCi0gICAgZGVmIF9mb3JlaWduX2tleV9mb3JtYXR0ZXIoc2VsZiwgdGlk LCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICB0aWQ6IFRh YmxlIE9JRAotICAgICAgICAgICAgZGF0YTogZGljdCBvZiBxdWVyeSByZXN1bHQKLQotICAgICAg ICBSZXR1cm5zOgotICAgICAgICAgICAgSXQgd2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBv ZiBxdWVyeSByZXN1bHQKLSAgICAgICAgICAgIGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0IGZv ciBmb3JlaWduIGtleSBjb25zdHJhaW50IG5vZGUKLSAgICAgICAgIiIiCi0KLSAgICAgICAgIyBX ZSB3aWxsIGZldGNoIGFsbCB0aGUgaW5kZXggY29uc3RyYWludHMgZm9yIHRoZSB0YWJsZQotICAg ICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuZm9yZWlnbl9rZXlfdGVt cGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJv cGVydGllcy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkKQot Ci0gICAgICAgIHN0YXR1cywgcmVzdWx0ID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCi0K LSAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2 ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzdWx0KQotCi0gICAgICAgIGZvciBmayBpbiByZXN1bHRbJ3Jv d3MnXToKLQotICAgICAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxm LmZvcmVpZ25fa2V5X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdnZXRfY29uc3RyYWludF9jb2xzLnNxbCddKSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGtleXM9emlwKGZrWydjb25ma2V5J10sIGZrWydjb25rZXknXSksCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZnJlbGlkPWZrWydjb25mcmVsaWQnXSkKLQot ICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKLQot ICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJu YWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKLQotICAgICAgICAgICAgY29sdW1ucyA9IFtd Ci0gICAgICAgICAgICBjb2xzID0gW10KLSAgICAgICAgICAgIGZvciByb3cgaW4gcmVzWydyb3dz J106Ci0gICAgICAgICAgICAgICAgY29sdW1ucy5hcHBlbmQoeyJsb2NhbF9jb2x1bW4iOiByb3db J2NvbmF0dG5hbWUnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5j ZXMiOiBma1snY29uZnJlbGlkJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJy ZWZlcmVuY2VkIjogcm93Wydjb25mYXR0bmFtZSddfSkKLSAgICAgICAgICAgICAgICBjb2xzLmFw cGVuZChyb3dbJ2NvbmF0dG5hbWUnXSkKLQotICAgICAgICAgICAgZmtbJ2NvbHVtbnMnXSA9IGNv bHVtbnMKLQotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxm LmZvcmVpZ25fa2V5X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdnZXRfcGFyZW50LnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0aWQ9ZmtbJ2NvbHVtbnMnXVswXVsncmVmZXJlbmNlcyddKQotCi0gICAg ICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKLSAg ICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFs X3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQotCi0gICAgICAgICAgICBma1sncmVtb3RlX3Nj aGVtYSddID0gcnNldFsncm93cyddWzBdWydzY2hlbWEnXQotICAgICAgICAgICAgZmtbJ3JlbW90 ZV90YWJsZSddID0gcnNldFsncm93cyddWzBdWyd0YWJsZSddCi0KLSAgICAgICAgICAgIGNvdmVy aW5naW5kZXggPSBzZWxmLnNlYXJjaF9jb3ZlcmluZ2luZGV4KHRpZCwgY29scykKLQotICAgICAg ICAgICAgZmtbJ2NvdmVyaW5naW5kZXgnXSA9IGNvdmVyaW5naW5kZXgKLSAgICAgICAgICAgIGlm IGNvdmVyaW5naW5kZXg6Ci0gICAgICAgICAgICAgICAgZmtbJ2F1dG9pbmRleCddID0gVHJ1ZQot ICAgICAgICAgICAgICAgIGZrWydoYXNpbmRleCddID0gVHJ1ZQotICAgICAgICAgICAgZWxzZToK LSAgICAgICAgICAgICAgICBma1snYXV0b2luZGV4J10gPSBGYWxzZQotICAgICAgICAgICAgICAg IGZrWydoYXNpbmRleCddID0gRmFsc2UKLSAgICAgICAgICAgICMgSWYgbm90IGV4aXN0cyB0aGVu IGNyZWF0ZSBsaXN0IGFuZC9vciBhcHBlbmQgaW50bwotICAgICAgICAgICAgIyBleGlzdGluZyBs aXN0IFsgQWRkaW5nIGludG8gbWFpbiBkYXRhIGRpY3RdCi0gICAgICAgICAgICBkYXRhLnNldGRl ZmF1bHQoJ2ZvcmVpZ25fa2V5JywgW10pLmFwcGVuZChmaykKLQotICAgICAgICByZXR1cm4gZGF0 YQotCi0gICAgZGVmIF9jaGVja19jb25zdHJhaW50X2Zvcm1hdHRlcihzZWxmLCB0aWQsIGRhdGEp OgotICAgICAgICAiIiIKLSAgICAgICAgQXJnczoKLSAgICAgICAgICAgIHRpZDogVGFibGUgT0lE Ci0gICAgICAgICAgICBkYXRhOiBkaWN0IG9mIHF1ZXJ5IHJlc3VsdAotCi0gICAgICAgIFJldHVy bnM6Ci0gICAgICAgICAgICBJdCB3aWxsIHJldHVybiBmb3JtYXR0ZWQgb3V0cHV0IG9mIHF1ZXJ5 IHJlc3VsdAotICAgICAgICAgICAgYXMgcGVyIGNsaWVudCBtb2RlbCBmb3JtYXQgZm9yIGNoZWNr IGNvbnN0cmFpbnQgbm9kZQotICAgICAgICAiIiIKLQotICAgICAgICAjIFdlIHdpbGwgZmV0Y2gg YWxsIHRoZSBpbmRleCBjb25zdHJhaW50cyBmb3IgdGhlIHRhYmxlCi0gICAgICAgIFNRTCA9IHJl bmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5jaGVja19jb25zdHJhaW50X3RlbXBsYXRlX3Bh dGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMu c3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCkKLQotICAgICAg ICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQotCi0gICAgICAgIGlm IG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVy cm9ybXNnPXJlcykKLSAgICAgICAgIyBJZiBub3QgZXhpc3RzIHRoZW4gY3JlYXRlIGxpc3QgYW5k L29yIGFwcGVuZCBpbnRvCi0gICAgICAgICMgZXhpc3RpbmcgbGlzdCBbIEFkZGluZyBpbnRvIG1h aW4gZGF0YSBkaWN0XQotCi0gICAgICAgIGRhdGFbJ2NoZWNrX2NvbnN0cmFpbnQnXSA9IHJlc1sn cm93cyddCi0KLSAgICAgICAgcmV0dXJuIGRhdGEKLQotICAgIGRlZiBfZXhjbHVzaW9uX2NvbnN0 cmFpbnRfZm9ybWF0dGVyKHNlbGYsIGRpZCwgdGlkLCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAg ICAgIEFyZ3M6Ci0gICAgICAgICAgICB0aWQ6IFRhYmxlIE9JRAotICAgICAgICAgICAgZGF0YTog ZGljdCBvZiBxdWVyeSByZXN1bHQKLQotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgSXQg d2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1bHQKLSAgICAgICAgICAg IGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0IGZvciBleGNsdXNpb24gY29uc3RyYWludCBub2Rl Ci0gICAgICAgICIiIgotCi0gICAgICAgICMgV2Ugd2lsbCBmZXRjaCBhbGwgdGhlIGluZGV4IGNv bnN0cmFpbnRzIGZvciB0aGUgdGFibGUKLSAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFtzZWxmLmV4Y2x1c2lvbl9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRpZCwgdGlkPXRpZCkKLQotICAgICAgICBz dGF0dXMsIHJlc3VsdCA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3Qoc3FsKQotCi0gICAgICAgIGlm IG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVy cm9ybXNnPXJlc3VsdCkKLQotICAgICAgICBmb3IgZXggaW4gcmVzdWx0Wydyb3dzJ106Ci0KLSAg ICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5leGNsdXNpb25f Y29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnZ2V0X2NvbnN0cmFpbnRfY29scy5zcWwnXSksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2lkPWV4WydvaWQnXSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb2xjbnQ9ZXhbJ2luZG5hdHRzJ10pCi0KLSAgICAgICAgICAgIHN0YXR1 cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCi0KLSAgICAgICAgICAgIGlmIG5v dCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihl cnJvcm1zZz1yZXMpCi0KLSAgICAgICAgICAgIGNvbHVtbnMgPSBbXQotICAgICAgICAgICAgZm9y IHJvdyBpbiByZXNbJ3Jvd3MnXToKLSAgICAgICAgICAgICAgICBpZiByb3dbJ29wdGlvbnMnXSAm IDE6Ci0gICAgICAgICAgICAgICAgICAgIG9yZGVyID0gRmFsc2UKLSAgICAgICAgICAgICAgICAg ICAgbnVsbHNfb3JkZXIgPSBUcnVlIGlmIChyb3dbJ29wdGlvbnMnXSAmIDIpIGVsc2UgRmFsc2UK LSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBvcmRlciA9IFRydWUK LSAgICAgICAgICAgICAgICAgICAgbnVsbHNfb3JkZXIgPSBUcnVlIGlmIChyb3dbJ29wdGlvbnMn XSAmIDIpIGVsc2UgRmFsc2UKLQotICAgICAgICAgICAgICAgIGNvbHVtbnMuYXBwZW5kKHsiY29s dW1uIjogcm93Wydjb2xkZWYnXS5zdHJpcCgnIicpLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAib3Blcl9jbGFzcyI6IHJvd1snb3BjbmFtZSddLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAib3JkZXIiOiBvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIm51bGxzX29yZGVyIjogbnVsbHNfb3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJvcGVyYXRvciI6IHJvd1snb3BybmFtZSddLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiY29sX3R5cGUiOiByb3dbJ2RhdGF0eXBlJ10KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfSkKLQotICAgICAgICAgICAgZXhbJ2NvbHVtbnMnXSA9IGNvbHVt bnMKLSAgICAgICAgICAgICMgSWYgbm90IGV4aXN0cyB0aGVuIGNyZWF0ZSBsaXN0IGFuZC9vciBh cHBlbmQgaW50bwotICAgICAgICAgICAgIyBleGlzdGluZyBsaXN0IFsgQWRkaW5nIGludG8gbWFp biBkYXRhIGRpY3RdCi0gICAgICAgICAgICBkYXRhLnNldGRlZmF1bHQoJ2V4Y2x1ZGVfY29uc3Ry YWludCcsIFtdKS5hcHBlbmQoZXgpCi0KLSAgICAgICAgcmV0dXJuIGRhdGEKLQotICAgIGRlZiBz ZWFyY2hfY292ZXJpbmdpbmRleChzZWxmLCB0aWQsIGNvbHMpOgotICAgICAgICAiIiIKLQotICAg ICAgICBBcmdzOgotICAgICAgICAgIHRpZDogVGFibGUgaWQKLSAgICAgICAgICBjb2xzOiBjb2x1 bW4gbGlzdAotCi0gICAgICAgIFJldHVybnM6Ci0KLSAgICAgICAgIiIiCi0KLSAgICAgICAgY29s cyA9IHNldChjb2xzKQotICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3Nl bGYuZm9yZWlnbl9rZXlfdGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnZ2V0X2NvbnN0cmFpbnRzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRpZD10aWQpCi0gICAgICAgIHN0YXR1cywgY29uc3RyYWludHMgPSBzZWxm LmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKLQotICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAg ICAgICAgcmFpc2UgRXhjZXB0aW9uKGNvbnN0cmFpbnRzKQotCi0gICAgICAgIGZvciBjb3N0cm50 IGluIGNvbnN0cmFpbnRzWydyb3dzJ106Ci0KLSAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1w bGF0ZSgKLSAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5mb3JlaWduX2tleV90ZW1wbGF0 ZV9wYXRoLCAnZ2V0X2NvbHMuc3FsJ10pLAotICAgICAgICAgICAgICAgIGNpZD1jb3N0cm50Wydv aWQnXSwKLSAgICAgICAgICAgICAgICBjb2xjbnQ9Y29zdHJudFsnaW5kbmF0dHMnXSkKLSAgICAg ICAgICAgIHN0YXR1cywgcmVzdCA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3Qoc3FsKQotCi0gICAg ICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9z ZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzdCkKLQotICAgICAgICAgICAgaW5kZXhjb2xzID0gc2V0 KCkKLSAgICAgICAgICAgIGZvciByIGluIHJlc3RbJ3Jvd3MnXToKLSAgICAgICAgICAgICAgICBp bmRleGNvbHMuYWRkKHJbJ2NvbHVtbiddLnN0cmlwKCciJykpCi0KLSAgICAgICAgICAgIGlmIGxl bihjb2xzIC0gaW5kZXhjb2xzKSA9PSBsZW4oaW5kZXhjb2xzIC0gY29scykgPT0gMDoKLSAgICAg ICAgICAgICAgICByZXR1cm4gY29zdHJudFsiaWR4bmFtZSJdCi0KLSAgICAgICAgcmV0dXJuIE5v bmUKLQotICAgIGRlZiBfZm9ybWF0dGVyKHNlbGYsIGRpZCwgc2NpZCwgdGlkLCBkYXRhKToKLSAg ICAgICAgIiIiCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBkYXRhOiBkaWN0IG9mIHF1ZXJ5 IHJlc3VsdAotICAgICAgICAgICAgc2NpZDogc2NoZW1hIG9pZAotICAgICAgICAgICAgdGlkOiB0 YWJsZSBvaWQKLQotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgSXQgd2lsbCByZXR1cm4g Zm9ybWF0dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1bHQKLSAgICAgICAgICAgIGFzIHBlciBjbGll bnQgbW9kZWwgZm9ybWF0Ci0gICAgICAgICIiIgotICAgICAgICAjIE5lZWQgdG8gZm9ybWF0IHNl Y3VyaXR5IGxhYmVscyBhY2NvcmRpbmcgdG8gY2xpZW50IGpzIGNvbGxlY3Rpb24KLSAgICAgICAg aWYgJ3NlY2xhYmVscycgaW4gZGF0YSBhbmQgZGF0YVsnc2VjbGFiZWxzJ10gaXMgbm90IE5vbmU6 Ci0gICAgICAgICAgICBzZWNsYWJlbHMgPSBbXQotICAgICAgICAgICAgZm9yIHNlY2xibHMgaW4g ZGF0YVsnc2VjbGFiZWxzJ106Ci0gICAgICAgICAgICAgICAgaywgdiA9IHNlY2xibHMuc3BsaXQo Jz0nKQotICAgICAgICAgICAgICAgIHNlY2xhYmVscy5hcHBlbmQoeydwcm92aWRlcic6IGssICds YWJlbCc6IHZ9KQotCi0gICAgICAgICAgICBkYXRhWydzZWNsYWJlbHMnXSA9IHNlY2xhYmVscwot Ci0gICAgICAgICMgV2UgbmVlZCB0byBwYXJzZSAmIGNvbnZlcnQgQUNMIGNvbWluZyBmcm9tIGRh dGFiYXNlIHRvIGpzb24gZm9ybWF0Ci0gICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIu am9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAnYWNsLnNxbCddKSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRpZD10aWQsIHNjaWQ9c2NpZCkKLSAgICAgICAgc3RhdHVzLCBhY2wgPSBz ZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKLSAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9YWNsKQotCi0gICAg ICAgICMgV2Ugd2lsbCBzZXQgZ2V0IHByaXZpbGVnZXMgZnJvbSBhY2wgc3FsIHNvIHdlIGRvbid0 IG5lZWQKLSAgICAgICAgIyBpdCBmcm9tIHByb3BlcnRpZXMgc3FsCi0gICAgICAgIGZvciByb3cg aW4gYWNsWydyb3dzJ106Ci0gICAgICAgICAgICBwcml2ID0gcGFyc2VfcHJpdl9mcm9tX2RiKHJv dykKLSAgICAgICAgICAgIGlmIHJvd1snZGVmdHlwZSddIGluIGRhdGE6Ci0gICAgICAgICAgICAg ICAgZGF0YVtyb3dbJ2RlZnR5cGUnXV0uYXBwZW5kKHByaXYpCi0gICAgICAgICAgICBlbHNlOgot ICAgICAgICAgICAgICAgIGRhdGFbcm93WydkZWZ0eXBlJ11dID0gW3ByaXZdCi0KLSAgICAgICAg IyBXZSB3aWxsIGFkZCBBdXRvIHZhY3V1bSBkZWZhdWx0cyB3aXRoIG91dCByZXN1bHQgZm9yIGdy aWQKLSAgICAgICAgZGF0YVsndmFjdXVtX3RhYmxlJ10gPSBzZWxmLnBhcnNlX3ZhY3V1bV9kYXRh KHNlbGYuY29ubiwgZGF0YSwgJ3RhYmxlJykKLSAgICAgICAgZGF0YVsndmFjdXVtX3RvYXN0J10g PSBzZWxmLnBhcnNlX3ZhY3V1bV9kYXRhKHNlbGYuY29ubiwgZGF0YSwgJ3RvYXN0JykKLQotICAg ICAgICAjIEZldGNoIGNvbHVtbnMgZm9yIHRoZSB0YWJsZSBsb2dpYwotICAgICAgICAjCi0gICAg ICAgICMgMSkgQ2hlY2sgaWYgb2ZfdHlwZSBhbmQgaW5oZXJpdGVkIHRhYmxlcyBhcmUgcHJlc2Vu dD8KLSAgICAgICAgIyAyKSBJZiB5ZXMgdGhlbiBGZXRjaCBhbGwgdGhlIGNvbHVtbnMgZm9yIG9m X3R5cGUgYW5kIGluaGVyaXRlZCB0YWJsZXMKLSAgICAgICAgIyAzKSBBZGQgY29sdW1ucyBpbiBj b2x1bW5zIGNvbGxlY3Rpb24KLSAgICAgICAgIyA0KSBGaW5kIGFsbCB0aGUgY29sdW1ucyBmb3Ig dGFibGVzIGFuZCBmaWx0ZXIgb3V0IGNvbHVtbnMgd2hpY2ggYXJlCi0gICAgICAgICMgICBub3Qg aW5oZXJpdGVkIGZyb20gYW55IHRhYmxlICYgZm9ybWF0IHRoZW0gb25lIGJ5IG9uZQotCi0gICAg ICAgICMgR2V0IG9mX3R5cGUgdGFibGUgY29sdW1ucyBhbmQgYWRkIGl0IGludG8gY29sdW1ucyBk aWN0Ci0gICAgICAgIGlmIGRhdGFbJ3R5cG5hbWUnXToKLSAgICAgICAgICAgIFNRTCA9IHJlbmRl cl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2NvbHVtbnNfZm9yX3RhYmxlLnNxbCdd KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bmFtZT1kYXRhWyd0eXBuYW1l J10pCi0KLSAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChT UUwpCi0gICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAgIHJldHVybiBp bnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQotICAgICAgICAgICAgZGF0YVsnY29s dW1ucyddID0gcmVzWydyb3dzJ10KLQotICAgICAgICAjIEdldCBpbmhlcml0ZWQgdGFibGUocykg Y29sdW1ucyBhbmQgYWRkIGl0IGludG8gY29sdW1ucyBkaWN0Ci0gICAgICAgIGVsaWYgZGF0YVsn Y29sbF9pbmhlcml0cyddIGFuZCBsZW4oZGF0YVsnY29sbF9pbmhlcml0cyddKSA+IDA6Ci0gICAg ICAgICAgICBjb2x1bW5zID0gW10KLSAgICAgICAgICAgICMgUmV0dXJuIGFsbCB0YWJsZXMgd2hp Y2ggY2FuIGJlIGluaGVyaXRlZCAmIGRvIG5vdCBzaG93Ci0gICAgICAgICAgICAjIHN5c3RlbSBj b2x1bW5zCi0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYu dGVtcGxhdGVfcGF0aCwgJ2dldF9pbmhlcml0cy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2hvd19zeXN0ZW1fb2JqZWN0cz1GYWxzZQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29u bi5leGVjdXRlXzJkYXJyYXkoU1FMKQotICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAg ICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJzZXQpCi0K LSAgICAgICAgICAgIGZvciByb3cgaW4gcnNldFsncm93cyddOgotICAgICAgICAgICAgICAgIGlm IHJvd1snaW5oZXJpdHMnXSBpbiBkYXRhWydjb2xsX2luaGVyaXRzJ106Ci0gICAgICAgICAgICAg ICAgICAgICMgRmV0Y2ggY29sdW1ucyB1c2luZyBpbmhlcml0ZWQgdGFibGUgT0lECi0gICAgICAg ICAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0 ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdnZXRfY29sdW1uc19mb3JfdGFibGUuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGlkPXJvd1snb2lkJ10pCi0gICAgICAgICAgICAgICAgICAg IHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCi0gICAgICAgICAgICAg ICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50 ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKLSAgICAgICAgICAgICAgICAgICAgY29s dW1ucy5leHRlbmQocmVzWydyb3dzJ11bOl0pCi0gICAgICAgICAgICBkYXRhWydjb2x1bW5zJ10g PSBjb2x1bW5zCi0KLSAgICAgICAgIyBXZSB3aWxsIGZldGNoIGFsbCB0aGUgY29sdW1ucyBmb3Ig dGhlIHRhYmxlIHVzaW5nCi0gICAgICAgICMgY29sdW1ucyBwcm9wZXJ0aWVzLnNxbCwgc28gd2Ug bmVlZCB0byBzZXQgdGVtcGxhdGUgcGF0aAotICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUo Ii8iLmpvaW4oW3NlbGYuY29sdW1uX3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGlkPXRpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo b3dfc3lzX29iamVjdHM9RmFsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLQot ICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQotICAgICAg ICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1yZXMpCi0gICAgICAgIGFsbF9jb2x1bW5zID0gcmVzWydyb3dzJ10KLQotICAg ICAgICAjIEZpbHRlciBpbmhlcml0ZWQgY29sdW1ucyBmcm9tIGFsbCBjb2x1bW5zCi0gICAgICAg IGlmICdjb2x1bW5zJyBpbiBkYXRhIGFuZCBsZW4oZGF0YVsnY29sdW1ucyddKSA+IDAgXAotICAg ICAgICAgICAgICAgIGFuZCBsZW4oYWxsX2NvbHVtbnMpID4gMDoKLSAgICAgICAgICAgIGZvciBy b3cgaW4gZGF0YVsnY29sdW1ucyddOgotICAgICAgICAgICAgICAgIGZvciBpLCBjb2wgaW4gZW51 bWVyYXRlKGFsbF9jb2x1bW5zKToKLSAgICAgICAgICAgICAgICAgICAgIyBJZiBib3RoIG5hbWUg YXJlIHNhbWUgdGhlbiByZW1vdmUgaXQKLSAgICAgICAgICAgICAgICAgICAgIyBhcyBpdCBpcyBp bmhlcml0ZWQgZnJvbSBvdGhlciB0YWJsZQotICAgICAgICAgICAgICAgICAgICBpZiBjb2xbJ25h bWUnXSA9PSByb3dbJ25hbWUnXToKLSAgICAgICAgICAgICAgICAgICAgICAgICMgUmVtb3ZlIHNh bWUgY29sdW1uIGZyb20gYWxsX2NvbHVtbnMgYXMKLSAgICAgICAgICAgICAgICAgICAgICAgICMg YWxyZWFkeSBoYXZlIGl0IGNvbHVtbnMgY29sbGVjdGlvbgotICAgICAgICAgICAgICAgICAgICAg ICAgZGVsIGFsbF9jb2x1bW5zW2ldCi0KLSAgICAgICAgICAgICMgSWYgYW55IGNvbHVtbiBpcyBh ZGRlZCB0aGVuIHVwZGF0ZSBjb2x1bW5zIGNvbGxlY3Rpb24KLSAgICAgICAgICAgIGlmIGxlbihh bGxfY29sdW1ucykgPiAwOgotICAgICAgICAgICAgICAgIGRhdGFbJ2NvbHVtbnMnXSArPSBhbGxf Y29sdW1ucwotICAgICAgICAjIElmIG5vIGluaGVyaXRlZCBjb2x1bW5zIGZvdW5kIHRoZW4gYWRk IGFsbCBjb2x1bW5zCi0gICAgICAgIGVsaWYgbGVuKGFsbF9jb2x1bW5zKSA+IDA6Ci0gICAgICAg ICAgICBkYXRhWydjb2x1bW5zJ10gPSBhbGxfY29sdW1ucwotCi0gICAgICAgIGlmICdjb2x1bW5z JyBpbiBkYXRhIGFuZCBsZW4oZGF0YVsnY29sdW1ucyddKSA+IDA6Ci0gICAgICAgICAgICBkYXRh ID0gc2VsZi5fY29sdW1uc19mb3JtYXR0ZXIodGlkLCBkYXRhKQotCi0gICAgICAgICMgSGVyZSB3 ZSB3aWxsIGFkZCBjb25zdHJhaW50IGluIG91ciBvdXRwdXQKLSAgICAgICAgZGF0YSA9IHNlbGYu X2luZGV4X2NvbnN0cmFpbnRzX2Zvcm1hdHRlcihkaWQsIHRpZCwgZGF0YSkKLSAgICAgICAgZGF0 YSA9IHNlbGYuX2ZvcmVpZ25fa2V5X2Zvcm1hdHRlcih0aWQsIGRhdGEpCi0gICAgICAgIGRhdGEg PSBzZWxmLl9jaGVja19jb25zdHJhaW50X2Zvcm1hdHRlcih0aWQsIGRhdGEpCi0gICAgICAgIGRh dGEgPSBzZWxmLl9leGNsdXNpb25fY29uc3RyYWludF9mb3JtYXR0ZXIoZGlkLCB0aWQsIGRhdGEp Ci0KLSAgICAgICAgcmV0dXJuIGRhdGEKLQotICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBA QmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KICAgICBkZWYgcHJvcGVydGllcyhzZWxm LCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBm dW5jdGlvbiB3aWxsIHNob3cgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdGVkIHRhYmxlIG5v ZGUuCkBAIC0xMTA5LDEwICs1NTIsMTEgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmll dywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgICAgIEpTT04gb2Yg c2VsZWN0ZWQgdGFibGUgbm9kZQogICAgICAgICAiIiIKIAotICAgICAgICBTUUwgPSByZW5kZXJf dGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkaWQ9ZGlkLCBzY2lkPXNjaWQsIHRpZD10aWQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKKyAg ICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYu dGFibGVfdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAgZGlk PWRpZCwgc2NpZD1zY2lkLCB0aWQ9dGlkLAorICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxm LmRhdGxhc3RzeXNvaWQKKyAgICAgICAgKQogICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29u bi5leGVjdXRlX2RpY3QoU1FMKQogICAgICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAg cmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCkBAIC0xMTIwLDQxICs1 NjQsMjIgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIs IFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgaWYgbGVuKHJlc1sncm93cyddKSA9PSAwOgogICAg ICAgICAgICAgICAgIHJldHVybiBnb25lKGdldHRleHQoIlRoZSBzcGVjaWZpZWQgdGFibGUgY291 bGQgbm90IGJlIGZvdW5kLiIpKQogCi0gICAgICAgIGRhdGEgPSByZXNbJ3Jvd3MnXVswXQotCi0g ICAgICAgIGRhdGFbJ3ZhY3V1bV9zZXR0aW5nc19zdHInXSA9ICIiCi0KLSAgICAgICAgaWYgZGF0 YVsndGFibGVfdmFjdXVtX3NldHRpbmdzX3N0ciddIGlzIG5vdCBOb25lOgotICAgICAgICAgICAg ZGF0YVsndmFjdXVtX3NldHRpbmdzX3N0ciddICs9IGRhdGFbCi0gICAgICAgICAgICAgICAgJ3Rh YmxlX3ZhY3V1bV9zZXR0aW5nc19zdHInXS5yZXBsYWNlKCcsJywgJ1xuJykKLQotICAgICAgICBp ZiBkYXRhWyd0b2FzdF90YWJsZV92YWN1dW1fc2V0dGluZ3Nfc3RyJ10gaXMgbm90IE5vbmU6Ci0g ICAgICAgICAgICBkYXRhWyd2YWN1dW1fc2V0dGluZ3Nfc3RyJ10gKz0gJ1xuJyArICdcbicuam9p bigKLSAgICAgICAgICAgICAgICBbJ3RvYXN0XycgKyBzZXR0aW5nIGZvciBzZXR0aW5nIGluIGRh dGFbCi0gICAgICAgICAgICAgICAgICAgICd0b2FzdF90YWJsZV92YWN1dW1fc2V0dGluZ3Nfc3Ry JwotICAgICAgICAgICAgICAgIF0uc3BsaXQoJywnKV0KLSAgICAgICAgICAgICkKLSAgICAgICAg ZGF0YVsndmFjdXVtX3NldHRpbmdzX3N0ciddID0gZGF0YVsKLSAgICAgICAgICAgICd2YWN1dW1f c2V0dGluZ3Nfc3RyJwotICAgICAgICBdLnJlcGxhY2UoIj0iLCAiID0gIikKLQotICAgICAgICBk YXRhID0gc2VsZi5fZm9ybWF0dGVyKGRpZCwgc2NpZCwgdGlkLCBkYXRhKQotCi0gICAgICAgIHJl dHVybiBhamF4X3Jlc3BvbnNlKAotICAgICAgICAgICAgcmVzcG9uc2U9ZGF0YSwKLSAgICAgICAg ICAgIHN0YXR1cz0yMDAKLSAgICAgICAgKQorICAgICAgICByZXR1cm4gc3VwZXIoVGFibGVWaWV3 LCBzZWxmKS5wcm9wZXJ0aWVzKAorICAgICAgICAgICAgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlk LCByZXMpCiAKLSAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisgICAgQEJhc2VUYWJsZVZpZXcuY2hl Y2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIHR5cGVzKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQs IHRpZD1Ob25lLCBjbGlkPU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAgUmV0dXJuczoKICAg ICAgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gbGlzdCBvZiB0eXBlcyBhdmFpbGFi bGUgZm9yIGNvbHVtbiBub2RlCiAgICAgICAgICAgICBmb3Igbm9kZS1hamF4LWNvbnRyb2wKICAg ICAgICAgIiIiCi0gICAgICAgIGNvbmRpdGlvbiA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihb c2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdnZXRfdHlwZXNfd2hlcmVfY29uZGl0aW9uLnNxbCddKSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dfc3lzdGVtX29iamVjdHM9c2VsZi5ibHVlcHJp bnQuc2hvd19zeXN0ZW1fb2JqZWN0cykKKyAgICAgICAgY29uZGl0aW9uID0gcmVuZGVyX3RlbXBs YXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oWworICAgICAgICAgICAgICAgIHNlbGYudGFibGVf dGVtcGxhdGVfcGF0aCwgJ2dldF90eXBlc193aGVyZV9jb25kaXRpb24uc3FsJworICAgICAgICAg ICAgXSksCisgICAgICAgICAgICBzaG93X3N5c3RlbV9vYmplY3RzPXNlbGYuYmx1ZXByaW50LnNo b3dfc3lzdGVtX29iamVjdHMKKyAgICAgICAgKQogCiAgICAgICAgIHN0YXR1cywgdHlwZXMgPSBz ZWxmLmdldF90eXBlcyhzZWxmLmNvbm4sIGNvbmRpdGlvbiwgVHJ1ZSkKIApAQCAtMTE2Niw3ICs1 OTEsNyBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwg VmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgc3RhdHVzPTIwMAogICAgICAgICApCiAKLSAg ICBAY2hlY2tfcHJlY29uZGl0aW9uCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0 aW9uCiAgICAgZGVmIGdldF9jb2x1bW5zKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZD1O b25lKToKICAgICAgICAgIiIiCiAgICAgICAgIFJldHVybnMgdGhlIFRhYmxlIENvbHVtbnMuCkBA IC0xMTg5LDEzICs2MTQsMTkgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0 YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgZGF0YSA9IHJlcXVlc3QuYXJn cyBpZiByZXF1ZXN0LmFyZ3MgZWxzZSBOb25lCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlm IGRhdGEgYW5kICd0aWQnIGluIGRhdGE6Ci0gICAgICAgICAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2NvbHVtbnNfZm9yX3RhYmxlLnNxbCdd KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPWRhdGFbJ3RpZCdd KQorICAgICAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAg ICAgICAgIi8iLmpvaW4oWworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZV90ZW1w bGF0ZV9wYXRoLCAnZ2V0X2NvbHVtbnNfZm9yX3RhYmxlLnNxbCcKKyAgICAgICAgICAgICAgICAg ICAgXSksCisgICAgICAgICAgICAgICAgICAgIHRpZD1kYXRhWyd0aWQnXQorICAgICAgICAgICAg ICAgICkKICAgICAgICAgICAgIGVsaWYgZGF0YSBhbmQgJ3RuYW1lJyBpbiBkYXRhOgotICAgICAg ICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9w YXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dl dF9jb2x1bW5zX2Zvcl90YWJsZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRuYW1lPWRhdGFbJ3RuYW1lJ10pCisgICAgICAgICAgICAgICAgU1FMID0gcmVu ZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbCisgICAgICAgICAg ICAgICAgICAgICAgICBzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsICdnZXRfY29sdW1uc19mb3Jf dGFibGUuc3FsJworICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICAgICAg dG5hbWU9ZGF0YVsndG5hbWUnXQorICAgICAgICAgICAgICAgICkKIAogICAgICAgICAgICAgaWYg U1FMOgogICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGlj dChTUUwpCkBAIC0xMjExLDcgKzY0Miw3IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZp ZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIGV4Y2VwdCBFeGNl cHRpb24gYXMgZToKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJy b3Jtc2c9c3RyKGUpKQogCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVW aWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBnZXRfb2Z0eXBlKHNlbGYsIGdpZCwgc2lk LCBkaWQsIHNjaWQsIHRpZD1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIFJldHVybnM6CkBA IC0xMjIwLDEwICs2NTEsMTIgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0 YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgIiIiCiAgICAgICAgIHJlcyA9 IFt7J2xhYmVsJzogJycsICd2YWx1ZSc6ICcnfV0KICAgICAgICAgdHJ5OgotICAgICAgICAgICAg U1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfb2Z0eXBlLnNxbCdd KSwgc2NpZD1zY2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl90 eXBlPXNlbGYubWFuYWdlci5zZXJ2ZXJfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaG93X3N5c19vYmplY3RzPXNlbGYuYmx1ZXByaW50LnNob3dfc3lzdGVtX29iamVj dHMpCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAg Ii8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ2dldF9vZnR5cGUuc3FsJ10pLAor ICAgICAgICAgICAgICAgIHNjaWQ9c2NpZCwKKyAgICAgICAgICAgICAgICBzZXJ2ZXJfdHlwZT1z ZWxmLm1hbmFnZXIuc2VydmVyX3R5cGUsCisgICAgICAgICAgICAgICAgc2hvd19zeXNfb2JqZWN0 cz1zZWxmLmJsdWVwcmludC5zaG93X3N5c3RlbV9vYmplY3RzCisgICAgICAgICAgICApCiAgICAg ICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKICAg ICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFs X3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCkBAIC0xMjQxLDcgKzY3NCw3IEBAIGNsYXNzIFRh YmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6 CiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHJldHVybiBpbnRl cm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUpKQogCi0gICAgQGNoZWNrX3ByZWNvbmRp dGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBnZXRf aW5oZXJpdHMoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkPU5vbmUpOgogICAgICAgICAi IiIKICAgICAgICAgUmV0dXJuczoKQEAgLTEyNTAsMTAgKzY4MywxMiBAQCBjbGFzcyBUYWJsZVZp ZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAg ICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmVzID0gW10KLSAgICAgICAgICAg IFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAnZ2V0 X2luaGVyaXRzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93 X3N5c3RlbV9vYmplY3RzPXNlbGYuYmx1ZXByaW50LnNob3dfc3lzdGVtX29iamVjdHMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZXJ2ZXJfdHlwZT1zZWxmLm1hbmFnZXIuc2VydmVyX3R5cGUpCisg ICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgIi8iLmpv aW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ2dldF9pbmhlcml0cy5zcWwnXSksCisgICAg ICAgICAgICAgICAgc2hvd19zeXN0ZW1fb2JqZWN0cz1zZWxmLmJsdWVwcmludC5zaG93X3N5c3Rl bV9vYmplY3RzLAorICAgICAgICAgICAgICAgIHRpZD10aWQsCisgICAgICAgICAgICAgICAgc2Vy dmVyX3R5cGU9c2VsZi5tYW5hZ2VyLnNlcnZlcl90eXBlCisgICAgICAgICAgICApCiAgICAgICAg ICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKICAgICAg ICAgICAgIGlmIG5vdCBzdGF0dXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3Nl cnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCkBAIC0xMjcxLDI1ICs3MDYsMzEgQEAgY2xhc3MgVGFi bGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToK ICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgcmV0dXJuIGludGVy bmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1zdHIoZSkpCiAKLSAgICBAY2hlY2tfcHJlY29uZGl0 aW9uCi0gICAgZGVmIGdldF9yZWxhdGlvbnMoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlk PU5vbmUpOgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgorICAgIGRlZiBn ZXRfYXR0YWNoX3RhYmxlcyhzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQ9Tm9uZSk6CiAg ICAgICAgICIiIgogICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiB3 aWxsIHJldHVybiBsaXN0IG9mIHRhYmxlcyBhdmFpbGFibGUgZm9yIGxpa2UvcmVsYXRpb24KLSAg ICAgICAgICAgIGNvbWJvYm94IHdoaWxlIGNyZWF0aW5nIG5ldyB0YWJsZQorICAgICAgICAgICAg VGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBsaXN0IG9mIHRhYmxlcyBhdmFpbGFibGUgdG8gYmUg YXR0YWNoZWQKKyAgICAgICAgICAgIHRvIHRoZSBwYXJ0aXRpb25lZCB0YWJsZS4KICAgICAgICAg IiIiCi0gICAgICAgIHJlcyA9IFt7J2xhYmVsJzogJycsICd2YWx1ZSc6ICcnfV0KICAgICAgICAg dHJ5OgotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRl bXBsYXRlX3BhdGgsICdnZXRfcmVsYXRpb25zLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaG93X3N5c19vYmplY3RzPXNlbGYuYmx1ZXByaW50LnNob3dfc3lzdGVt X29iamVjdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3R5cGU9 c2VsZi5tYW5hZ2VyLnNlcnZlcl90eXBlKQorICAgICAgICAgICAgcmVzID0gW10KKyAgICAgICAg ICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAiLyIuam9pbihbCisg ICAgICAgICAgICAgICAgICAgIHNlbGYucGFydGl0aW9uX3RlbXBsYXRlX3BhdGgsICdnZXRfYXR0 YWNoX3RhYmxlcy5zcWwnCisgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAgdGlk PXRpZAorICAgICAgICAgICAgKQorCiAgICAgICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNv bm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CiAgICAg ICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisK ICAgICAgICAgICAgIGZvciByb3cgaW4gcnNldFsncm93cyddOgogICAgICAgICAgICAgICAgIHJl cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIHsnbGFiZWwnOiByb3dbJ2xpa2VfcmVsYXRp b24nXSwgJ3ZhbHVlJzogcm93WydsaWtlX3JlbGF0aW9uJ119CisgICAgICAgICAgICAgICAgICAg IHsnbGFiZWwnOiByb3dbJ3RhYmxlX25hbWUnXSwgJ3ZhbHVlJzogcm93WydvaWQnXX0KICAgICAg ICAgICAgICAgICApCisKICAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCiAg ICAgICAgICAgICAgICAgZGF0YT1yZXMsCiAgICAgICAgICAgICAgICAgc3RhdHVzPTIwMApAQCAt MTI5OCw0MCArNzM5LDM0IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFU eXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMg ZToKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3Ry KGUpKQogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfY2x0eXBlX2Zvcm1hdHRlcihkYXRh X3R5cGUpOgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgorICAgIGRlZiBn ZXRfcmVsYXRpb25zKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZD1Ob25lKToKICAgICAg ICAgIiIiCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICAgIGRhdGFfdHlwZTogVHlwZSBzdHJp bmcKLQogICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgV2UgbmVlZCB0byByZW1vdmUgW10g ZnJvbSB0eXBlIGFuZCBhcHBlbmQgaXQKLSAgICAgICAgICAgIGFmdGVyIGxlbmd0aC9wcmVjaXNp b24gc28gd2Ugd2lsbCBzZW5kIGZsYWcgZm9yCi0gICAgICAgICAgICBzcWwgdGVtcGxhdGUKLSAg ICAgICAgIiIiCi0gICAgICAgIGlmICdbXScgaW4gZGF0YV90eXBlOgotICAgICAgICAgICAgcmV0 dXJuIGRhdGFfdHlwZVs6LTJdLCBUcnVlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1 cm4gZGF0YV90eXBlLCBGYWxzZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjb252ZXJ0 X2xlbmd0aF9wcmVjaXNpb25fdG9fc3RyaW5nKGRhdGEpOgorICAgICAgICAgICAgVGhpcyBmdW5j dGlvbiB3aWxsIHJldHVybiBsaXN0IG9mIHRhYmxlcyBhdmFpbGFibGUgZm9yIGxpa2UvcmVsYXRp b24KKyAgICAgICAgICAgIGNvbWJvYm94IHdoaWxlIGNyZWF0aW5nIG5ldyB0YWJsZQogICAgICAg ICAiIiIKLSAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbnZlcnQgbGVuZ3RoICYg cHJlY2lzaW9uIHRvIHN0cmluZwotICAgICAgICB0byBoYW5kbGUgY2FzZSBsaWtlIHdoZW4gdXNl ciBnaXZlcyAwIGFzIGxlbmd0aAotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBkYXRhOiBE YXRhIGZyb20gY2xpZW50CisgICAgICAgIHJlcyA9IFt7J2xhYmVsJzogJycsICd2YWx1ZSc6ICcn fV0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAg ICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsICdnZXRfcmVs YXRpb25zLnNxbCddKSwKKyAgICAgICAgICAgICAgICBzaG93X3N5c19vYmplY3RzPXNlbGYuYmx1 ZXByaW50LnNob3dfc3lzdGVtX29iamVjdHMsCisgICAgICAgICAgICAgICAgc2VydmVyX3R5cGU9 c2VsZi5tYW5hZ2VyLnNlcnZlcl90eXBlCisgICAgICAgICAgICApCisgICAgICAgICAgICBzdGF0 dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKKyAgICAgICAgICAgIGlm IG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1yZXMpCisgICAgICAgICAgICBmb3Igcm93IGluIHJzZXRbJ3Jvd3MnXToKKyAg ICAgICAgICAgICAgICByZXMuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICB7J2xhYmVsJzog cm93WydsaWtlX3JlbGF0aW9uJ10sICd2YWx1ZSc6IHJvd1snbGlrZV9yZWxhdGlvbiddfQorICAg ICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisg ICAgICAgICAgICAgICAgZGF0YT1yZXMsCisgICAgICAgICAgICAgICAgc3RhdHVzPTIwMAorICAg ICAgICAgICAgKQogCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgICBDb252ZXJ0ZWQgZGF0 YQotICAgICAgICAiIiIKLSAgICAgICAgaWYgJ2F0dGxlbicgaW4gZGF0YSBhbmQgZGF0YVsnYXR0 bGVuJ10gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBkYXRhWydhdHRsZW4nXSA9IHN0cihkYXRh WydhdHRsZW4nXSkKLSAgICAgICAgaWYgJ2F0dHByZWNpc2lvbicgaW4gZGF0YSBhbmQgZGF0YVsn YXR0cHJlY2lzaW9uJ10gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBkYXRhWydhdHRwcmVjaXNp b24nXSA9IHN0cihkYXRhWydhdHRwcmVjaXNpb24nXSkKLSAgICAgICAgcmV0dXJuIGRhdGEKKyAg ICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFs X3NlcnZlcl9lcnJvcihlcnJvcm1zZz1zdHIoZSkpCiAKICAgICBkZWYgX3BhcnNlX2Zvcm1hdF9j b2x1bW5zKHNlbGYsIGRhdGEsIG1vZGU9Tm9uZSk6CiAgICAgICAgICIiIgpAQCAtMTM2MCwxMiAr Nzk1LDEyIEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVy LCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayB0 eXBlIGZvciAnW10nIGluIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1snY2x0eXBl J10sIGNbJ2hhc1NxckJyYWNrZXQnXSA9IHNlbGYuX2NsdHlwZV9mb3JtYXR0ZXIoY1snY2x0eXBl J10pCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzZWxmLmNvbnZlcnRfbGVuZ3RoX3By ZWNpc2lvbl90b19zdHJpbmcoYykKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBUYWJsZVZp ZXcuY29udmVydF9sZW5ndGhfcHJlY2lzaW9uX3RvX3N0cmluZyhjKQogCiAgICAgICAgICAgICAg ICAgICAgIGRhdGFbJ2NvbHVtbnMnXVthY3Rpb25dID0gZmluYWxfY29sdW1ucwogICAgICAgICBl bHNlOgotICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGV4Y2x1ZGUgYWxsIHRoZSBjb2x1bW5zIHdo aWNoIGFyZSBpbmhlcml0ZWQgZnJvbSBvdGhlciB0YWJsZXMKLSAgICAgICAgICAgICMgJ0NSRUFU RScgbW9kZQorICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGV4Y2x1ZGUgYWxsIHRoZSBjb2x1bW5z IHdoaWNoIGFyZSBpbmhlcml0ZWQgZnJvbSBvdGhlcgorICAgICAgICAgICAgIyB0YWJsZXMgJ0NS RUFURScgbW9kZQogICAgICAgICAgICAgZmluYWxfY29sdW1ucyA9IFtdCiAKICAgICAgICAgICAg IGZvciBjIGluIGNvbHVtbnM6CkBAIC0xMzgyLDM1ICs4MTcsMTMgQEAgY2xhc3MgVGFibGVWaWV3 KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAg ICAgICAgICAgICAgICAgIyBjaGVjayB0eXBlIGZvciAnW10nIGluIGl0CiAgICAgICAgICAgICAg ICAgICAgIGNbJ2NsdHlwZSddLCBjWydoYXNTcXJCcmFja2V0J10gPSBzZWxmLl9jbHR5cGVfZm9y bWF0dGVyKGNbJ2NsdHlwZSddKQogCi0gICAgICAgICAgICAgICAgYyA9IHNlbGYuY29udmVydF9s ZW5ndGhfcHJlY2lzaW9uX3RvX3N0cmluZyhjKQorICAgICAgICAgICAgICAgIGMgPSBUYWJsZVZp ZXcuY29udmVydF9sZW5ndGhfcHJlY2lzaW9uX3RvX3N0cmluZyhjKQogCiAgICAgICAgICAgICBk YXRhWydjb2x1bW5zJ10gPSBmaW5hbF9jb2x1bW5zCiAKICAgICAgICAgcmV0dXJuIGRhdGEKIAot ICAgIGRlZiBjaGVja19hbmRfY29udmVydF9uYW1lX3RvX3N0cmluZyhzZWxmLCBkYXRhKToKLSAg ICAgICAgIiIiCi0gICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayBhbmQgY292ZXJ0IHRh YmxlIHRvIHN0cmluZyBpbmNhc2UKLSAgICAgICAgaXQgaXMgbnVtZXJpYwotCi0gICAgICAgIEFy Z3M6Ci0gICAgICAgICAgICBkYXRhOiBkYXRhIGRpY3QKLQotICAgICAgICBSZXR1cm5zOgotICAg ICAgICAgICAgVXBkYXRlZCBkYXRhIGRpY3QKLSAgICAgICAgIiIiCi0gICAgICAgICMgRm9yIFB5 dGhvbjIsIGl0IGNhbiBiZSBpbnQsIGxvbmcsIGZsb2F0Ci0gICAgICAgIGlmIGhhc2F0dHIoc3Ry LCAnZGVjb2RlJyk6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRhdGFbJ25hbWUnXSwgKGlu dCwgbG9uZywgZmxvYXQpKToKLSAgICAgICAgICAgICAgICBkYXRhWyduYW1lJ10gPSBzdHIoZGF0 YVsnbmFtZSddKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBGb3IgUHl0aG9uMywgaXQg Y2FuIGJlIGludCwgZmxvYXQKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YVsnbmFtZSdd LCAoaW50LCBmbG9hdCkpOgotICAgICAgICAgICAgICAgIGRhdGFbJ25hbWUnXSA9IHN0cihkYXRh WyduYW1lJ10pCi0gICAgICAgIHJldHVybiBkYXRhCi0KLQotICAgIEBjaGVja19wcmVjb25kaXRp b24KKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KICAgICBkZWYgY3JlYXRl KHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBm dW5jdGlvbiB3aWxsIGNyZWF0ZXMgbmV3IHRoZSB0YWJsZSBvYmplY3QKQEAgLTE0NTEsNyArODY0 LDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZh Y3V1bVNldHRpbmdzKToKIAogICAgICAgICAjIFBhcnNlICYgZm9ybWF0IGNvbHVtbnMKICAgICAg ICAgZGF0YSA9IHNlbGYuX3BhcnNlX2Zvcm1hdF9jb2x1bW5zKGRhdGEpCi0gICAgICAgIGRhdGEg PSBzZWxmLmNoZWNrX2FuZF9jb252ZXJ0X25hbWVfdG9fc3RyaW5nKGRhdGEpCisgICAgICAgIGRh dGEgPSBUYWJsZVZpZXcuY2hlY2tfYW5kX2NvbnZlcnRfbmFtZV90b19zdHJpbmcoZGF0YSkKIAog ICAgICAgICAjICdjb2xsX2luaGVyaXRzJyBpcyBBcnJheSBidXQgaXQgY29tZXMgYXMgc3RyaW5n IGZyb20gYnJvd3NlcgogICAgICAgICAjIFdlIHdpbGwgY29udmVydCBpdCBhZ2FpbiB0byBsaXN0 CkBAIC0xNDYzLDkgKzg3NiwxMiBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBE YXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogCiAgICAgICAgIGlmICdmb3JlaWduX2tl eScgaW4gZGF0YToKICAgICAgICAgICAgIGZvciBjIGluIGRhdGFbJ2ZvcmVpZ25fa2V5J106Ci0g ICAgICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmZvcmVp Z25fa2V5X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnZ2V0X3BhcmVudC5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRpZD1jWydjb2x1bW5zJ11bMF1bJ3JlZmVyZW5jZXMnXSkKKyAgICAg ICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICAgICIv Ii5qb2luKFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm9yZWlnbl9rZXlfdGVtcGxh dGVfcGF0aCwgJ2dldF9wYXJlbnQuc3FsJworICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAg ICAgICAgICAgICAgICAgdGlkPWNbJ2NvbHVtbnMnXVswXVsncmVmZXJlbmNlcyddCisgICAgICAg ICAgICAgICAgKQogICAgICAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVj dXRlXzJkYXJyYXkoU1FMKQogICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CiAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cnNldCkK QEAgLTE0NzQsMTIgKzg5MCwyNiBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBE YXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgICAgIGNbJ3JlbW90 ZV90YWJsZSddID0gcnNldFsncm93cyddWzBdWyd0YWJsZSddCiAKICAgICAgICAgdHJ5OgotICAg ICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3Bh dGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGUu c3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29u bj1zZWxmLmNvbm4pCi0gICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRl X3NjYWxhcihTUUwpCi0gICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAg IHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorICAgICAgICAgICAg cGFydGl0aW9uc19zcWwgPSAnJworICAgICAgICAgICAgcGFydGl0aW9uZWQgPSBGYWxzZQorICAg ICAgICAgICAgaWYgJ2lzX3BhcnRpdGlvbmVkJyBpbiBkYXRhIGFuZCBkYXRhWydpc19wYXJ0aXRp b25lZCddOgorICAgICAgICAgICAgICAgIGRhdGFbJ3JlbGtpbmQnXSA9ICdwJworICAgICAgICAg ICAgICAgICMgY3JlYXRlIHBhcnRpdGlvbiBzY2hlbWUKKyAgICAgICAgICAgICAgICBkYXRhWydw YXJ0aXRpb25fc2NoZW1lJ10gPSBzZWxmLmdldF9wYXJ0aXRpb25fc2NoZW1lKGRhdGEpCisgICAg ICAgICAgICAgICAgcGFydGl0aW9uc19zcWwgPSBzZWxmLmdldF9wYXJ0aXRpb25zX3NxbChkYXRh KQorICAgICAgICAgICAgICAgIHBhcnRpdGlvbmVkID0gVHJ1ZQorCisgICAgICAgICAgICBTUUwg PSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGFibGVf dGVtcGxhdGVfcGF0aCwgJ2NyZWF0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgZGF0YT1kYXRh LCBjb25uPXNlbGYuY29ubgorICAgICAgICAgICAgKQorCisgICAgICAgICAgICAjIEFwcGVuZCBT UUwgZm9yIHBhcnRpdGlvbnMKKyAgICAgICAgICAgIFNRTCArPSAnXG4nICsgcGFydGl0aW9uc19z cWwKKworICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIo U1FMKQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICByZXR1cm4g aW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKIAogICAgICAgICAgICAgIyBQb3N0 Z3JlU1FMIHRydW5jYXRlcyB0aGUgdGFibGUgbmFtZSB0byA2MyBjaGFyYWN0ZXJzLgogICAgICAg ICAgICAgIyBIYXZlIHRvIHRydW5jYXRlIHRoZSBuYW1lIGxpa2UgUG9zdGdyZVNRTCB0byBnZXQg dGhlCkBAIC0xNDkwLDE2ICs5MjAsMjEgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmll dywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgICAgICAgICBkYXRh WyduYW1lJ10gPSBkYXRhWyduYW1lJ11bMDpDT05TVF9NQVhfQ0hBUl9DT1VOVF0KIAogICAgICAg ICAgICAgIyBHZXQgdXBkYXRlZCBzY2hlbWEgb2lkCi0gICAgICAgICAgICBTUUwgPSByZW5kZXJf dGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnZ2V0X3NjaGVtYV9vaWQuc3FsJ10pLCB0bmFtZT1kYXRhWyduYW1l J10pCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAg Ii8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ2dldF9zY2hlbWFfb2lkLnNxbCdd KSwKKyAgICAgICAgICAgICAgICB0bmFtZT1kYXRhWyduYW1lJ10KKyAgICAgICAgICAgICkKIAog ICAgICAgICAgICAgc3RhdHVzLCBzY2lkID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKFNRTCkK ICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVy bmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1zY2lkKQogCiAgICAgICAgICAgICAjIHdlIG5lZWQg b2lkIHRvIHRvIGFkZCBvYmplY3QgaW4gdHJlZSBhdCBicm93c2VyCi0gICAgICAgICAgICBTUUwg PSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X29pZC5zcWwnXSksIHNjaWQ9c2NpZCwgZGF0 YT1kYXRhKQorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAg ICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsICdnZXRfb2lkLnNxbCddKSwK KyAgICAgICAgICAgICAgICBzY2lkPXNjaWQsIGRhdGE9ZGF0YQorICAgICAgICAgICAgKQorCiAg ICAgICAgICAgICBzdGF0dXMsIHRpZCA9IHNlbGYuY29ubi5leGVjdXRlX3NjYWxhcihTUUwpCiAg ICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5h bF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9dGlkKQpAQCAtMTUwOSwxMyArOTQ0LDE0IEBAIGNsYXNz IFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5n cyk6CiAgICAgICAgICAgICAgICAgICAgIHRpZCwKICAgICAgICAgICAgICAgICAgICAgc2NpZCwK ICAgICAgICAgICAgICAgICAgICAgZGF0YVsnbmFtZSddLAotICAgICAgICAgICAgICAgICAgICBp Y29uPSJpY29uLXRhYmxlIgorICAgICAgICAgICAgICAgICAgICBpY29uPSJpY29uLXBhcnRpdGlv biIgaWYgcGFydGl0aW9uZWQgZWxzZSAiaWNvbi10YWJsZSIsCisgICAgICAgICAgICAgICAgICAg IGlzX3BhcnRpdGlvbmVkPXBhcnRpdGlvbmVkCiAgICAgICAgICAgICAgICAgKQogICAgICAgICAg ICAgKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICByZXR1cm4g aW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0cihlKSkKIAotICAgIEBjaGVja19wcmVj b25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KICAgICBkZWYg dXBkYXRlKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCk6CiAgICAgICAgICIiIgogICAg ICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgdXBkYXRlIGFuIGV4aXN0aW5nIHRhYmxlIG9iamVjdApA QCAtMTUzOCwzNCArOTc0LDIxIEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERh dGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgICAgICAgICAgZGF0YVtrXSA9 IHYKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBTUUwsIG5hbWUgPSBzZWxmLmdldF9zcWwo ZGlkLCBzY2lkLCB0aWQsIGRhdGEpCi0KLSAgICAgICAgICAgIFNRTCA9IFNRTC5zdHJpcCgnXG4n KS5zdHJpcCgnICcpCi0gICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRl X3NjYWxhcihTUUwpCi0gICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAg IHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQotCi0gICAgICAgICAg ICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X3NjaGVtYV9vaWQuc3FsJ10pLCB0 aWQ9dGlkKQotICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFy cmF5KFNRTCkKKyAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAg ICAgICAiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwn XSksCisgICAgICAgICAgICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0aWQ9dGlkLAorICAgICAg ICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkCisgICAgICAgICAgICAp CisgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQog ICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJu YWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKIAotICAgICAgICAgICAgIyBuZXcgc2NoZW1h IGlkCi0gICAgICAgICAgICBzY2lkID0gcmVzWydyb3dzJ11bMF1bJ3NjaWQnXQotCi0gICAgICAg ICAgICByZXR1cm4ganNvbmlmeSgKLSAgICAgICAgICAgICAgICBub2RlPXNlbGYuYmx1ZXByaW50 LmdlbmVyYXRlX2Jyb3dzZXJfbm9kZSgKLSAgICAgICAgICAgICAgICAgICAgdGlkLAotICAgICAg ICAgICAgICAgICAgICBzY2lkLAotICAgICAgICAgICAgICAgICAgICBuYW1lLAotICAgICAgICAg ICAgICAgICAgICBpY29uPSJpY29uLSVzIiAlIHNlbGYubm9kZV90eXBlCi0gICAgICAgICAgICAg ICAgKQotICAgICAgICAgICAgKQorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFRhYmxlVmlldywg c2VsZikudXBkYXRlKAorICAgICAgICAgICAgICAgIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCwg ZGF0YSwgcmVzKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICBy ZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0cihlKSkKIAotICAgIEBjaGVj a19wcmVjb25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KICAg ICBkZWYgZGVsZXRlKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCk6CiAgICAgICAgICIi IgogICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgZGVsZXRlcyB0aGUgdGFibGUgb2JqZWN0CkBA IC0xNTg1LDEwICsxMDA4LDExIEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERh dGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgICAgICBjYXNjYWRlID0gRmFs c2UKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8i LmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKKyAg ICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAiLyIuam9p bihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwnXSksCisgICAgICAg ICAgICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0aWQ9dGlkLAorICAgICAgICAgICAgICAgIGRh dGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkCisgICAgICAgICAgICApCiAgICAgICAgICAg ICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQogICAgICAgICAgICAg aWYgbm90IHN0YXR1czoKICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXJlcykKQEAgLTE2MDYsMTAgKzEwMzAsMTEgQEAgY2xhc3MgVGFibGVWaWV3 KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKIAogICAg ICAgICAgICAgZGF0YSA9IHJlc1sncm93cyddWzBdCiAKLSAgICAgICAgICAgIFNRTCA9IHJlbmRl cl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVsZXRlLnNxbCddKSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEsIGNhc2NhZGU9Y2FzY2FkZSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uPXNlbGYuY29ubikKKyAgICAgICAgICAg IFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi50 YWJsZV90ZW1wbGF0ZV9wYXRoLCAnZGVsZXRlLnNxbCddKSwKKyAgICAgICAgICAgICAgICBkYXRh PWRhdGEsIGNhc2NhZGU9Y2FzY2FkZSwKKyAgICAgICAgICAgICAgICBjb25uPXNlbGYuY29ubgor ICAgICAgICAgICAgKQogICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0 ZV9zY2FsYXIoU1FMKQogICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgICAg ICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKQEAgLTE2MjYsNyAr MTA1MSw3IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVy LCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUpKQogCi0g ICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRp dGlvbgogICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQpOgog ICAgICAgICAiIiIKICAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHRydW5jYXRlIHRoZSB0YWJs ZSBvYmplY3QKQEAgLTE2MzgsNDMgKzEwNjMsMjMgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGRO b2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgICAgc2Np ZDogU2NoZW1hIElECiAgICAgICAgICAgIHRpZDogVGFibGUgSUQKICAgICAgICAgIiIiCi0gICAg ICAgICMgQmVsb3cgd2lsbCBkZWNpZGUgaWYgaXQncyBzaW1wbGUgZHJvcCBvciBkcm9wIHdpdGgg Y2FzY2FkZSBjYWxsCi0gICAgICAgIGRhdGEgPSByZXF1ZXN0LmZvcm0gaWYgcmVxdWVzdC5mb3Jt IGVsc2UganNvbi5sb2FkcygKLSAgICAgICAgICAgIHJlcXVlc3QuZGF0YSwgZW5jb2Rpbmc9J3V0 Zi04JwotICAgICAgICApCi0gICAgICAgICMgQ29udmVydCBzdHIgJ3RydWUnIHRvIGJvb2xlYW4g dHlwZQotICAgICAgICBpc19jYXNjYWRlID0ganNvbi5sb2FkcyhkYXRhWydjYXNjYWRlJ10pCiAK ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2lu KFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkaWQ9ZGlkLCBzY2lkPXNjaWQsIHRpZD10aWQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCisgICAgICAg ICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3Nl bGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAg ICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKKyAgICAgICAgICAgICAgICBkYXRsYXN0 c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZAorICAgICAgICAgICAgKQogICAgICAgICAgICAgc3Rh dHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKICAgICAgICAgICAgIGlmIG5v dCBzdGF0dXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihl cnJvcm1zZz1yZXMpCi0gICAgICAgICAgICBkYXRhID0gcmVzWydyb3dzJ11bMF0KIAotICAgICAg ICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cnVuY2F0ZS5z cWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBjYXNj YWRlPWlzX2Nhc2NhZGUpCi0gICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVj dXRlX3NjYWxhcihTUUwpCi0gICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAg ICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQotCi0gICAgICAg ICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAotICAgICAgICAgICAgICAgIHN1Y2Nlc3M9 MSwKLSAgICAgICAgICAgICAgICBpbmZvPWdldHRleHQoIlRhYmxlIHRydW5jYXRlZCIpLAotICAg ICAgICAgICAgICAgIGRhdGE9ewotICAgICAgICAgICAgICAgICAgICAnaWQnOiB0aWQsCi0gICAg ICAgICAgICAgICAgICAgICdzY2lkJzogc2NpZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICkKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihUYWJsZVZpZXcsIHNlbGYpLnRydW5jYXRl KGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCwgcmVzKQogCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRp b24gYXMgZToKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jt c2c9c3RyKGUpKQogCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3 LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBlbmFibGVfZGlzYWJsZV90cmlnZ2VycyhzZWxm LCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBm dW5jdGlvbiB3aWxsIGVuYWJsZS9kaXNhYmxlIHRyaWdnZXIocykgb24gdGhlIHRhYmxlIG9iamVj dApAQCAtMTY5NCwxOCArMTA5OSwyMiBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3 LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICBpc19lbmFibGUgPSBq c29uLmxvYWRzKGRhdGFbJ2VuYWJsZSddKQogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIFNR TCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSks Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0 aWQ9dGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9 c2VsZi5kYXRsYXN0c3lzb2lkKQorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAor ICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsICdwcm9w ZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICBkaWQ9ZGlkLCBzY2lkPXNjaWQsIHRpZD10 aWQsCisgICAgICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQKKyAg ICAgICAgICAgICkKICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVf ZGljdChTUUwpCiAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgICAgIHJl dHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQogICAgICAgICAgICAgZGF0 YSA9IHJlc1sncm93cyddWzBdCiAKLSAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgi LyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnZW5hYmxlX2Rpc2FibGVfdHJpZ2dlci5zcWwnXSksCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBpc19lbmFibGVfdHJpZ2dlcj1p c19lbmFibGUpCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAg ICAgICAgIi8iLmpvaW4oWworICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlX3RlbXBsYXRl X3BhdGgsICdlbmFibGVfZGlzYWJsZV90cmlnZ2VyLnNxbCcKKyAgICAgICAgICAgICAgICBdKSwK KyAgICAgICAgICAgICAgICBkYXRhPWRhdGEsIGlzX2VuYWJsZV90cmlnZ2VyPWlzX2VuYWJsZQor ICAgICAgICAgICAgKQogICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0 ZV9zY2FsYXIoU1FMKQogICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgICAg ICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKQEAgLTE3MjMsNyAr MTEzMiw3IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVy LCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUpKQogCi0g ICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRp dGlvbgogICAgIGRlZiByZXNldChzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQpOgogICAg ICAgICAiIiIKICAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHJlc2V0IHN0YXRpc3RpY3Mgb2Yg dGFibGUKQEAgLTE3MzUsMjcgKzExNDQsOSBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVW aWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICBzY2lkOiBT Y2hlbWEgSUQKICAgICAgICAgICAgdGlkOiBUYWJsZSBJRAogICAgICAgICAiIiIKLSAgICAgICAg dHJ5OgotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRl bXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdyZXNldF9zdGF0cy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGlkPXRpZCkKLSAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfc2Nh bGFyKFNRTCkKLSAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0 dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCi0KLSAgICAgICAgICAgIHJl dHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCi0gICAgICAgICAgICAgICAgc3VjY2Vzcz0xLAotICAg ICAgICAgICAgICAgIGluZm89Z2V0dGV4dCgiVGFibGUgc3RhdGlzdGljcyBoYXZlIGJlZW4gcmVz ZXQiKSwKLSAgICAgICAgICAgICAgICBkYXRhPXsKLSAgICAgICAgICAgICAgICAgICAgJ2lkJzog dGlkLAotICAgICAgICAgICAgICAgICAgICAnc2NpZCc6IHNjaWQKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICApCisgICAgICAgIHJldHVybiBCYXNlVGFibGVWaWV3LnJlc2V0X3N0YXRp c3RpY3Moc2VsZiwgc2NpZCwgdGlkKQogCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToK LSAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUp KQotCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3By ZWNvbmRpdGlvbgogICAgIGRlZiBtc3FsKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZD1O b25lKToKICAgICAgICAgIiIiCiAgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgbW9k aWZpZWQgc3FsIGZvciB0YWJsZSBvYmplY3QKQEAgLTE3NjgsNjg2ICsxMTU5LDM0IEBAIGNsYXNz IFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5n cyk6CiAgICAgICAgICAgIHRpZDogVGFibGUgSUQKICAgICAgICAgIiIiCiAgICAgICAgIGRhdGEg PSBkaWN0KCkKKyAgICAgICAgcmVzID0gTm9uZQogICAgICAgICBmb3IgaywgdiBpbiByZXF1ZXN0 LmFyZ3MuaXRlbXMoKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBkYXRhW2td ID0ganNvbi5sb2Fkcyh2LCBlbmNvZGluZz0ndXRmLTgnKQogICAgICAgICAgICAgZXhjZXB0IChW YWx1ZUVycm9yLCBUeXBlRXJyb3IsIEtleUVycm9yKToKICAgICAgICAgICAgICAgICBkYXRhW2td ID0gdgogCi0gICAgICAgIFNRTCwgbmFtZSA9IHNlbGYuZ2V0X3NxbChkaWQsIHNjaWQsIHRpZCwg ZGF0YSkKLSAgICAgICAgU1FMID0gcmUuc3ViKCdcbnsyLH0nLCAnXG5cbicsIFNRTCkKLSAgICAg ICAgU1FMID0gU1FMLnN0cmlwKCdcbicpCi0gICAgICAgIGlmIFNRTCA9PSAnJzoKLSAgICAgICAg ICAgIFNRTCA9ICItLW1vZGlmaWVkIFNRTCIKLSAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNw b25zZSgKLSAgICAgICAgICAgIGRhdGE9U1FMLAotICAgICAgICAgICAgc3RhdHVzPTIwMAotICAg ICAgICApCi0KLSAgICBkZWYgZ2V0X2luZGV4X2NvbnN0cmFpbnRfc3FsKHNlbGYsIGRpZCwgdGlk LCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAgICAgICBBcmdzOgotICAgICAgICAgICB0aWQ6IFRh YmxlIElECi0gICAgICAgICAgIGRhdGE6IGRhdGEgZGljdCBjb21pbmcgZnJvbSB0aGUgY2xpZW50 Ci0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGdlbmVyYXRl IG1vZGlmaWVkIHNxbCBmb3IgaW5kZXggY29uc3RyYWludHMKLSAgICAgICAgKFByaW1hcnkgS2V5 ICYgVW5pcXVlKQotICAgICAgICAiIiIKLSAgICAgICAgc3FsID0gW10KLSAgICAgICAgIyBXZSB3 aWxsIGZldGNoIGFsbCB0aGUgaW5kZXggY29uc3RyYWludHMgZm9yIHRoZSB0YWJsZQotICAgICAg ICBpbmRleF9jb25zdHJhaW50cyA9IHsKLSAgICAgICAgICAgICdwJzogJ3ByaW1hcnlfa2V5Jywg J3UnOiAndW5pcXVlX2NvbnN0cmFpbnQnCi0gICAgICAgIH0KLQotICAgICAgICBmb3IgY3R5cGUg aW4gaW5kZXhfY29uc3RyYWludHMua2V5cygpOgotICAgICAgICAgICAgIyBDaGVjayBpZiBjb25z dHJhaW50IGlzIGluIGRhdGEKLSAgICAgICAgICAgICMgSWYgeWVzIHRoZW4gd2UgbmVlZCB0byBj aGVjayBmb3IgYWRkL2NoYW5nZS9kZWxldGUKLSAgICAgICAgICAgIGlmIGluZGV4X2NvbnN0cmFp bnRzW2N0eXBlXSBpbiBkYXRhOgotICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQgPSBkYXRhW2lu ZGV4X2NvbnN0cmFpbnRzW2N0eXBlXV0KLSAgICAgICAgICAgICAgICAjIElmIGNvbnN0cmFpbnQo cykgaXMvYXJlIGRlbGV0ZWQKLSAgICAgICAgICAgICAgICBpZiAnZGVsZXRlZCcgaW4gY29uc3Ry YWludDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gY29uc3RyYWludFsnZGVsZXRlZCdd OgotICAgICAgICAgICAgICAgICAgICAgICAgY1snc2NoZW1hJ10gPSBkYXRhWydzY2hlbWEnXQot ICAgICAgICAgICAgICAgICAgICAgICAgY1sndGFibGUnXSA9IGRhdGFbJ25hbWUnXQotCi0gICAg ICAgICAgICAgICAgICAgICAgICAjIFNxbCBmb3IgZHJvcAotICAgICAgICAgICAgICAgICAgICAg ICAgc3FsLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfdGVtcGxh dGUoIi8iLmpvaW4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxmLmluZGV4 X2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdkZWxldGUuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh PWMsIGNvbm49c2VsZi5jb25uKS5zdHJpcCgnXG4nKQotICAgICAgICAgICAgICAgICAgICAgICAg KQotCi0gICAgICAgICAgICAgICAgaWYgJ2NoYW5nZWQnIGluIGNvbnN0cmFpbnQ6Ci0gICAgICAg ICAgICAgICAgICAgIGZvciBjIGluIGNvbnN0cmFpbnRbJ2NoYW5nZWQnXToKLSAgICAgICAgICAg ICAgICAgICAgICAgIGNbJ3NjaGVtYSddID0gZGF0YVsnc2NoZW1hJ10KLSAgICAgICAgICAgICAg ICAgICAgICAgIGNbJ3RhYmxlJ10gPSBkYXRhWyduYW1lJ10KLQotICAgICAgICAgICAgICAgICAg ICAgICAgcHJvcGVydGllc19zcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgW3NlbGYuaW5kZXhfY29uc3RyYWludF90ZW1wbGF0ZV9wYXRo LCAncHJvcGVydGllcy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRp ZCwgdGlkPXRpZCwgY2lkPWNbJ29pZCddLCBjb25zdHJhaW50X3R5cGU9Y3R5cGUpCi0gICAgICAg ICAgICAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QocHJv cGVydGllc19zcWwpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJy b3Jtc2c9cmVzKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBvbGRfZGF0YSA9IHJlc1sncm93 cyddWzBdCi0gICAgICAgICAgICAgICAgICAgICAgICAjIFNxbCB0byB1cGRhdGUgb2JqZWN0Ci0g ICAgICAgICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNlbGYuaW5kZXhfY29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAndXBkYXRlLnNxbCddKSwgZGF0YT1jLCBvX2RhdGE9b2xk X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm49c2VsZi5jb25uKS5z dHJpcCgnXG4nKQotICAgICAgICAgICAgICAgICAgICAgICAgKQotCi0gICAgICAgICAgICAgICAg aWYgJ2FkZGVkJyBpbiBjb25zdHJhaW50OgotICAgICAgICAgICAgICAgICAgICBmb3IgYyBpbiBj b25zdHJhaW50WydhZGRlZCddOgotICAgICAgICAgICAgICAgICAgICAgICAgY1snc2NoZW1hJ10g PSBkYXRhWydzY2hlbWEnXQotICAgICAgICAgICAgICAgICAgICAgICAgY1sndGFibGUnXSA9IGRh dGFbJ25hbWUnXQotCi0gICAgICAgICAgICAgICAgICAgICAgICAjIFNxbCB0byBhZGQgb2JqZWN0 Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnZhbGlkYXRlX2NvbnN0cmFpbnMoaW5k ZXhfY29uc3RyYWludHNbY3R5cGVdLCBjKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz cWwuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfdGVtcGxh dGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5p bmRleF9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhPWMsIGNvbm49c2VsZi5jb25uLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludF9uYW1lPSdQUklNQVJZIEtFWScKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN0eXBlID09ICdwJyBlbHNlICdVTklR VUUnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuc3RyaXAoJ1xuJykKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbC5hcHBlbmQoCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdldHRleHQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnLS0gZGVmaW5pdGlvbiBpbmNvbXBsZXRlIGZvciB7MH0gY29uc3RyYWludCcuZm9ybWF0 KGluZGV4X2NvbnN0cmFpbnRzW2N0eXBlXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgaWYgbGVuKHNxbCkg PiAwOgotICAgICAgICAgICAgIyBKb2luIGFsbCB0aGUgc3FsKHMpIGFzIHNpbmdsZSBzdHJpbmcK LSAgICAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzcWwpCi0gICAgICAgIGVsc2U6Ci0gICAg ICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGdldF9mb3JlaWduX2tleV9zcWwoc2VsZiwg dGlkLCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAgICAgICBBcmdzOgotICAgICAgICAgICB0aWQ6 IFRhYmxlIElECi0gICAgICAgICAgIGRhdGE6IGRhdGEgZGljdCBjb21pbmcgZnJvbSB0aGUgY2xp ZW50Ci0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGdlbmVy YXRlIG1vZGlmaWVkIHNxbCBmb3IgZm9yZWlnbiBrZXkKLSAgICAgICAgIiIiCi0gICAgICAgIHNx bCA9IFtdCi0gICAgICAgICMgQ2hlY2sgaWYgY29uc3RyYWludCBpcyBpbiBkYXRhCi0gICAgICAg ICMgSWYgeWVzIHRoZW4gd2UgbmVlZCB0byBjaGVjayBmb3IgYWRkL2NoYW5nZS9kZWxldGUKLSAg ICAgICAgaWYgJ2ZvcmVpZ25fa2V5JyBpbiBkYXRhOgotICAgICAgICAgICAgY29uc3RyYWludCA9 IGRhdGFbJ2ZvcmVpZ25fa2V5J10KLSAgICAgICAgICAgICMgSWYgY29uc3RyYWludChzKSBpcy9h cmUgZGVsZXRlZAotICAgICAgICAgICAgaWYgJ2RlbGV0ZWQnIGluIGNvbnN0cmFpbnQ6Ci0gICAg ICAgICAgICAgICAgZm9yIGMgaW4gY29uc3RyYWludFsnZGVsZXRlZCddOgotICAgICAgICAgICAg ICAgICAgICBjWydzY2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCi0gICAgICAgICAgICAgICAgICAg IGNbJ3RhYmxlJ10gPSBkYXRhWyduYW1lJ10KLQotICAgICAgICAgICAgICAgICAgICAjIFNxbCBm b3IgZHJvcAotICAgICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKAotICAgICAgICAgICAgICAg ICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFtzZWxmLmZvcmVpZ25fa2V5X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdkZWxldGUuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRhdGE9YywgY29ubj1zZWxmLmNvbm4pLnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAgICAg ICkKLQotICAgICAgICAgICAgaWYgJ2NoYW5nZWQnIGluIGNvbnN0cmFpbnQ6Ci0gICAgICAgICAg ICAgICAgZm9yIGMgaW4gY29uc3RyYWludFsnY2hhbmdlZCddOgotICAgICAgICAgICAgICAgICAg ICBjWydzY2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCi0gICAgICAgICAgICAgICAgICAgIGNbJ3Rh YmxlJ10gPSBkYXRhWyduYW1lJ10KLQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzX3Nx bCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKLSAgICAgICAgICAgICAgICAgICAgICAgIFtz ZWxmLmZvcmVpZ25fa2V5X3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKLSAgICAg ICAgICAgICAgICAgICAgICAgIHRpZD10aWQsIGNpZD1jWydvaWQnXSkKLSAgICAgICAgICAgICAg ICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KHByb3BlcnRpZXNfc3Fs KQotICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCi0KLSAgICAg ICAgICAgICAgICAgICAgb2xkX2RhdGEgPSByZXNbJ3Jvd3MnXVswXQotICAgICAgICAgICAgICAg ICAgICAjIFNxbCB0byB1cGRhdGUgb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgIHNxbC5hcHBl bmQoCi0gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oWwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm9yZWlnbl9rZXlfdGVtcGxhdGVfcGF0 aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXBkYXRlLnNxbCddKSwgZGF0YT1jLCBv X2RhdGE9b2xkX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubj1zZWxmLmNv bm4pLnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAgICAgICkKLQotICAgICAgICAgICAgICAg ICAgICBpZiBub3Qgc2VsZi52YWxpZGF0ZV9jb25zdHJhaW5zKCdmb3JlaWduX2tleScsIGMpOgot ICAgICAgICAgICAgICAgICAgICAgICAgc3FsLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnZXR0ZXh0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS0gZGVm aW5pdGlvbiBpbmNvbXBsZXRlIGZvciBmb3JlaWduX2tleSBjb25zdHJhaW50JwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzcWwpCi0KLSAgICAgICAgICAgICAg ICAgICAgaWYgJ2NvbHVtbnMnIGluIGM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2xzID0g W10KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjb2wgaW4gY1snY29sdW1ucyddOgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHMuYXBwZW5kKGNvbFsnbG9jYWxfY29sdW1uJ10p Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvdmVyaW5naW5kZXggPSBzZWxmLnNlYXJjaF9j b3ZlcmluZ2luZGV4KHRpZCwgY29scykKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgY292 ZXJpbmdpbmRleCBpcyBOb25lIGFuZCAnYXV0b2luZGV4JyBpbiBjIGFuZCBjWydhdXRvaW5kZXgn XSBhbmQgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2NvdmVyaW5naW5kZXgn IGluIGMgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbJ2Nv dmVyaW5naW5kZXgnXSAhPSAnJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsLmFw cGVuZChyZW5kZXJfdGVtcGxhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIv Ii5qb2luKFtzZWxmLmZvcmVpZ25fa2V5X3RlbXBsYXRlX3BhdGgsICdjcmVhdGVfaW5kZXguc3Fs J10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWMsIGNvbm49c2VsZi5j b25uKS5zdHJpcCgnXG4nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KQotCi0gICAgICAgICAgICBpZiAnYWRkZWQnIGluIGNvbnN0cmFpbnQ6Ci0gICAgICAgICAgICAg ICAgZm9yIGMgaW4gY29uc3RyYWludFsnYWRkZWQnXToKLSAgICAgICAgICAgICAgICAgICAgY1sn c2NoZW1hJ10gPSBkYXRhWydzY2hlbWEnXQotICAgICAgICAgICAgICAgICAgICBjWyd0YWJsZSdd ID0gZGF0YVsnbmFtZSddCi0KLSAgICAgICAgICAgICAgICAgICAgIyBTcWwgdG8gYWRkIG9iamVj dAotICAgICAgICAgICAgICAgICAgICAjIENvbHVtbnMKLQotICAgICAgICAgICAgICAgICAgICBp ZiBub3Qgc2VsZi52YWxpZGF0ZV9jb25zdHJhaW5zKCdmb3JlaWduX2tleScsIGMpOgotICAgICAg ICAgICAgICAgICAgICAgICAgc3FsLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnZXR0ZXh0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS0gZGVmaW5pdGlv biBpbmNvbXBsZXRlIGZvciBmb3JlaWduX2tleSBjb25zdHJhaW50JwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzcWwpCi0KLSAgICAgICAgICAgICAgICAgICAg U1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmZvcmVpZ25fa2V5X3RlbXBsYXRl X3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ2dldF9wYXJlbnQuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGlkPWNbJ2NvbHVtbnMnXVswXVsncmVmZXJlbmNlcyddKQotICAgICAgICAgICAg ICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKLSAg ICAgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cnNldCkKLQotICAgICAgICAg ICAgICAgICAgICBjWydyZW1vdGVfc2NoZW1hJ10gPSByc2V0Wydyb3dzJ11bMF1bJ3NjaGVtYSdd Ci0gICAgICAgICAgICAgICAgICAgIGNbJ3JlbW90ZV90YWJsZSddID0gcnNldFsncm93cyddWzBd Wyd0YWJsZSddCi0KLSAgICAgICAgICAgICAgICAgICAgc3FsLmFwcGVuZCgKLSAgICAgICAgICAg ICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiLyIuam9pbihbc2VsZi5mb3JlaWduX2tleV90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnY3JlYXRlLnNxbCddKSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkYXRhPWMsIGNvbm49c2VsZi5jb25uCi0gICAgICAgICAgICAgICAgICAg ICAgICApLnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAgICAgICkKLQotICAgICAgICAgICAg ICAgICAgICBpZiBjWydhdXRvaW5kZXgnXToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNxbC5h cHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5mb3JlaWduX2tleV90 ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J2NyZWF0ZV9pbmRleC5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh dGE9YywgY29ubj1zZWxmLmNvbm4pLnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAgICAgICAg ICApCi0KLSAgICAgICAgaWYgbGVuKHNxbCkgPiAwOgotICAgICAgICAgICAgIyBKb2luIGFsbCB0 aGUgc3FsKHMpIGFzIHNpbmdsZSBzdHJpbmcKLSAgICAgICAgICAgIHJldHVybiAnXG5cbicuam9p bihzcWwpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVm IGdldF9jaGVja19jb25zdHJhaW50X3NxbChzZWxmLCB0aWQsIGRhdGEpOgotICAgICAgICAiIiIK LSAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgIHRpZDogVGFibGUgSUQKLSAgICAgICAgICAgZGF0 YTogZGF0YSBkaWN0IGNvbWluZyBmcm9tIHRoZSBjbGllbnQKLQotICAgICAgICBSZXR1cm5zOgot ICAgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBnZW5lcmF0ZSBtb2RpZmllZCBzcWwgZm9yIGNo ZWNrIGNvbnN0cmFpbnQKLSAgICAgICAgIiIiCi0gICAgICAgIHNxbCA9IFtdCi0gICAgICAgICMg Q2hlY2sgaWYgY29uc3RyYWludCBpcyBpbiBkYXRhCi0gICAgICAgICMgSWYgeWVzIHRoZW4gd2Ug bmVlZCB0byBjaGVjayBmb3IgYWRkL2NoYW5nZS9kZWxldGUKLSAgICAgICAgaWYgJ2NoZWNrX2Nv bnN0cmFpbnQnIGluIGRhdGE6Ci0gICAgICAgICAgICBjb25zdHJhaW50ID0gZGF0YVsnY2hlY2tf Y29uc3RyYWludCddCi0gICAgICAgICAgICAjIElmIGNvbnN0cmFpbnQocykgaXMvYXJlIGRlbGV0 ZWQKLSAgICAgICAgICAgIGlmICdkZWxldGVkJyBpbiBjb25zdHJhaW50OgotICAgICAgICAgICAg ICAgIGZvciBjIGluIGNvbnN0cmFpbnRbJ2RlbGV0ZWQnXToKLSAgICAgICAgICAgICAgICAgICAg Y1snc2NoZW1hJ10gPSBkYXRhWydzY2hlbWEnXQotICAgICAgICAgICAgICAgICAgICBjWyd0YWJs ZSddID0gZGF0YVsnbmFtZSddCi0KLSAgICAgICAgICAgICAgICAgICAgIyBTcWwgZm9yIGRyb3AK LSAgICAgICAgICAgICAgICAgICAgc3FsLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAg IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBb c2VsZi5jaGVja19jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdkZWxldGUuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh dGE9YywgY29ubj1zZWxmLmNvbm4pLnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAgICAgICkK LQotICAgICAgICAgICAgaWYgJ2NoYW5nZWQnIGluIGNvbnN0cmFpbnQ6Ci0gICAgICAgICAgICAg ICAgZm9yIGMgaW4gY29uc3RyYWludFsnY2hhbmdlZCddOgotICAgICAgICAgICAgICAgICAgICBj WydzY2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCi0gICAgICAgICAgICAgICAgICAgIGNbJ3RhYmxl J10gPSBkYXRhWyduYW1lJ10KLQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzX3NxbCA9 IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKLSAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxm LmNoZWNrX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAg ICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCwgY2lkPWNbJ29pZCddKQotICAgICAgICAgICAg ICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QocHJvcGVydGllc19z cWwpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKLQotICAg ICAgICAgICAgICAgICAgICBvbGRfZGF0YSA9IHJlc1sncm93cyddWzBdCi0gICAgICAgICAgICAg ICAgICAgICMgU3FsIHRvIHVwZGF0ZSBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgc3FsLmFw cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihb Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19jb25zdHJhaW50X3RlbXBs YXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VwZGF0ZS5zcWwnXSksIGRh dGE9Yywgb19kYXRhPW9sZF9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm49 c2VsZi5jb25uKS5zdHJpcCgnXG4nKQotICAgICAgICAgICAgICAgICAgICApCi0KLSAgICAgICAg ICAgIGlmICdhZGRlZCcgaW4gY29uc3RyYWludDoKLSAgICAgICAgICAgICAgICBmb3IgYyBpbiBj b25zdHJhaW50WydhZGRlZCddOgotICAgICAgICAgICAgICAgICAgICBjWydzY2hlbWEnXSA9IGRh dGFbJ3NjaGVtYSddCi0gICAgICAgICAgICAgICAgICAgIGNbJ3RhYmxlJ10gPSBkYXRhWyduYW1l J10KLQotICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi52YWxpZGF0ZV9jb25zdHJhaW5z KCdjaGVja19jb25zdHJhaW50JywgYyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcWwuYXBw ZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRleHQoCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICctLSBkZWZpbml0aW9uIGluY29tcGxldGUgZm9yIGNoZWNrX2Nv bnN0cmFpbnQnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAg ICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNx bCkKLQotICAgICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKAotICAgICAgICAgICAgICAgICAg ICAgICAgcmVuZGVyX3RlbXBsYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIi5q b2luKFtzZWxmLmNoZWNrX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGF0YT1jLCBjb25uPXNlbGYuY29ubgotICAgICAgICAgICAgICAgICAgICAg ICAgKS5zdHJpcCgnXG4nKQotICAgICAgICAgICAgICAgICAgICApCi0KLSAgICAgICAgaWYgbGVu KHNxbCkgPiAwOgotICAgICAgICAgICAgIyBKb2luIGFsbCB0aGUgc3FsKHMpIGFzIHNpbmdsZSBz dHJpbmcKLSAgICAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzcWwpCi0gICAgICAgIGVsc2U6 Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGdldF9leGNsdXNpb25fY29uc3Ry YWludF9zcWwoc2VsZiwgZGlkLCB0aWQsIGRhdGEpOgotICAgICAgICAiIiIKLSAgICAgICAgIEFy Z3M6Ci0gICAgICAgICAgIHRpZDogVGFibGUgSUQKLSAgICAgICAgICAgZGF0YTogZGF0YSBkaWN0 IGNvbWluZyBmcm9tIHRoZSBjbGllbnQKLQotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgIFRo aXMgZnVuY3Rpb24gd2lsbCBnZW5lcmF0ZSBtb2RpZmllZCBzcWwgZm9yIGV4Y2x1c2lvbiBjb25z dHJhaW50Ci0gICAgICAgICIiIgotICAgICAgICBzcWwgPSBbXQotICAgICAgICAjIENoZWNrIGlm IGNvbnN0cmFpbnQgaXMgaW4gZGF0YQotICAgICAgICAjIElmIHllcyB0aGVuIHdlIG5lZWQgdG8g Y2hlY2sgZm9yIGFkZC9jaGFuZ2UvZGVsZXRlCi0gICAgICAgIGlmICdleGNsdWRlX2NvbnN0cmFp bnQnIGluIGRhdGE6Ci0gICAgICAgICAgICBjb25zdHJhaW50ID0gZGF0YVsnZXhjbHVkZV9jb25z dHJhaW50J10KLSAgICAgICAgICAgICMgSWYgY29uc3RyYWludChzKSBpcy9hcmUgZGVsZXRlZAot ICAgICAgICAgICAgaWYgJ2RlbGV0ZWQnIGluIGNvbnN0cmFpbnQ6Ci0gICAgICAgICAgICAgICAg Zm9yIGMgaW4gY29uc3RyYWludFsnZGVsZXRlZCddOgotICAgICAgICAgICAgICAgICAgICBjWydz Y2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCi0gICAgICAgICAgICAgICAgICAgIGNbJ3RhYmxlJ10g PSBkYXRhWyduYW1lJ10KLQotICAgICAgICAgICAgICAgICAgICAjIFNxbCBmb3IgZHJvcAotICAg ICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgcmVu ZGVyX3RlbXBsYXRlKCIvIi5qb2luKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxm LmV4Y2x1c2lvbl9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdkZWxldGUuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh dGE9YywgY29ubj1zZWxmLmNvbm4pLnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAgICAgICkK LQotICAgICAgICAgICAgaWYgJ2NoYW5nZWQnIGluIGNvbnN0cmFpbnQ6Ci0gICAgICAgICAgICAg ICAgZm9yIGMgaW4gY29uc3RyYWludFsnY2hhbmdlZCddOgotICAgICAgICAgICAgICAgICAgICBj WydzY2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCi0gICAgICAgICAgICAgICAgICAgIGNbJ3RhYmxl J10gPSBkYXRhWyduYW1lJ10KLQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzX3NxbCA9 IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKLSAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxm LmV4Y2x1c2lvbl9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwK LSAgICAgICAgICAgICAgICAgICAgICAgIGRpZD1kaWQsIHRpZD10aWQsIGNpZD1jWydvaWQnXSkK LSAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0 KHByb3BlcnRpZXNfc3FsKQotICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1z Zz1yZXMpCi0KLSAgICAgICAgICAgICAgICAgICAgb2xkX2RhdGEgPSByZXNbJ3Jvd3MnXVswXQot ICAgICAgICAgICAgICAgICAgICAjIFNxbCB0byB1cGRhdGUgb2JqZWN0Ci0gICAgICAgICAgICAg ICAgICAgIHNxbC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfdGVtcGxh dGUoIi8iLmpvaW4oWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhjbHVzaW9u X2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAn dXBkYXRlLnNxbCddKSwgZGF0YT1jLCBvX2RhdGE9b2xkX2RhdGEsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29ubj1zZWxmLmNvbm4pLnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAg ICAgICkKLQotICAgICAgICAgICAgaWYgJ2FkZGVkJyBpbiBjb25zdHJhaW50OgotICAgICAgICAg ICAgICAgIGZvciBjIGluIGNvbnN0cmFpbnRbJ2FkZGVkJ106Ci0gICAgICAgICAgICAgICAgICAg IGNbJ3NjaGVtYSddID0gZGF0YVsnc2NoZW1hJ10KLSAgICAgICAgICAgICAgICAgICAgY1sndGFi bGUnXSA9IGRhdGFbJ25hbWUnXQotCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnZh bGlkYXRlX2NvbnN0cmFpbnMoJ2V4Y2x1ZGVfY29uc3RyYWludCcsIGMpOgotICAgICAgICAgICAg ICAgICAgICAgICAgc3FsLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0 ZXh0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS0gZGVmaW5pdGlvbiBpbmNv bXBsZXRlIGZvciBleGNsdXNpb25fY29uc3RyYWludCcKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICApCi0gICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gJ1xuXG4nLmpvaW4oc3FsKQotCi0gICAgICAgICAgICAgICAgICAgIHNxbC5hcHBl bmQoCi0gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfdGVtcGxhdGUoCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYuZXhjbHVzaW9uX2NvbnN0cmFpbnRfdGVt cGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0 ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1jLCBjb25uPXNlbGYu Y29ubgotICAgICAgICAgICAgICAgICAgICAgICAgKS5zdHJpcCgnXG4nKQotICAgICAgICAgICAg ICAgICAgICApCi0KLSAgICAgICAgaWYgbGVuKHNxbCkgPiAwOgotICAgICAgICAgICAgIyBKb2lu IGFsbCB0aGUgc3FsKHMpIGFzIHNpbmdsZSBzdHJpbmcKLSAgICAgICAgICAgIHJldHVybiB1J1xu XG4nLmpvaW4oc3FsKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQot ICAgIGRlZiBnZXRfdHJpZ2dlcl9mdW5jdGlvbl9zY2hlbWEoc2VsZiwgZGF0YSk6Ci0gICAgICAg ICIiIgotICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRyaWdnZXIgZnVuY3Rpb24g d2l0aCBzY2hlbWEgbmFtZQotICAgICAgICAiIiIKLSAgICAgICAgIyBJZiBsYW5ndWFnZSBpcyAn ZWRic3BsJyB0aGVuIHRyaWdnZXIgZnVuY3Rpb24gc2hvdWxkIGJlCi0gICAgICAgICMgJ0lubGlu ZSBFREItU1BMJyBlbHNlIHdlIHdpbGwgZmluZCB0aGUgdHJpZ2dlciBmdW5jdGlvbgotICAgICAg ICAjIHdpdGggc2NoZW1hIG5hbWUuCi0gICAgICAgIGlmIGRhdGFbJ2xhbm5hbWUnXSA9PSAnZWRi c3BsJzoKLSAgICAgICAgICAgIGRhdGFbJ3RmdW5jdGlvbiddID0gJ0lubGluZSBFREItU1BMJwot ICAgICAgICBlbHNlOgorICAgICAgICBpZiB0aWQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBT UUwgPSByZW5kZXJfdGVtcGxhdGUoCi0gICAgICAgICAgICAgICAgIi8iLmpvaW4oCi0gICAgICAg ICAgICAgICAgICAgIFtzZWxmLnRyaWdnZXJfdGVtcGxhdGVfcGF0aCwnZ2V0X3RyaWdnZXJmdW5j dGlvbnMuc3FsJ10KLSAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgIHRnZm9pZD1k YXRhWyd0Z2ZvaWQnXSwKLSAgICAgICAgICAgICAgICBzaG93X3N5c3RlbV9vYmplY3RzPXNlbGYu Ymx1ZXByaW50LnNob3dfc3lzdGVtX29iamVjdHMKKyAgICAgICAgICAgICAgICAiLyIuam9pbihb c2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwnXSksCisgICAgICAgICAg ICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0aWQ9dGlkLAorICAgICAgICAgICAgICAgIGRhdGxh c3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkCiAgICAgICAgICAgICApCi0KLSAgICAgICAgICAg IHN0YXR1cywgcmVzdWx0ID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCi0gICAgICAgICAg ICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9cmVzKQotCi0gICAgICAgICAgICAjIFVwZGF0ZSB0aGUgdHJpZ2dlciBm dW5jdGlvbiB3aGljaCB3ZSBoYXZlIGZldGNoZWQgd2l0aAotICAgICAgICAgICAgIyBzY2hlbWEg bmFtZQotICAgICAgICAgICAgaWYgJ3Jvd3MnIGluIHJlc3VsdCBhbmQgbGVuKHJlc3VsdFsncm93 cyddKSA+IDAgYW5kIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGZ1bmN0aW9ucycg aW4gcmVzdWx0Wydyb3dzJ11bMF06Ci0gICAgICAgICAgICAgICAgZGF0YVsndGZ1bmN0aW9uJ10g PSByZXN1bHRbJ3Jvd3MnXVswXVsndGZ1bmN0aW9ucyddCi0gICAgICAgIHJldHVybiBkYXRhCi0K LSAgICBkZWYgX2Zvcm1hdF9hcmdzKHNlbGYsIGFyZ3MpOgotICAgICAgICAiIiIKLSAgICAgICAg VGhpcyBmdW5jdGlvbiB3aWxsIGZvcm1hdCBhcmd1bWVudHMuCi0KLSAgICAgICAgQXJnczoKLSAg ICAgICAgICAgIGFyZ3M6IEFyZ3VtZW50cwotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAg ICBGb3JtYXRlZCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uCi0gICAgICAgICIiIgotICAgICAgICBm b3JtYXR0ZWRfYXJncyA9IFsiJ3swfSciLmZvcm1hdChhcmcpIGZvciBhcmcgaW4gYXJnc10KLSAg ICAgICAgcmV0dXJuICcsICcuam9pbihmb3JtYXR0ZWRfYXJncykKLQotICAgIGRlZiBnZXRfc3Fs KHNlbGYsIGRpZCwgc2NpZCwgdGlkLCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRoaXMg ZnVuY3Rpb24gd2lsbCBnZW5lcmF0ZSBjcmVhdGUvdXBkYXRlIHNxbCBmcm9tIG1vZGVsIGRhdGEK LSAgICAgICAgY29taW5nIGZyb20gY2xpZW50Ci0gICAgICAgICIiIgotICAgICAgICBpZiB0aWQg aXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4o W3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKICAgICAgICAg ICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCiAgICAgICAgICAg ICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9cmVzKQogCi0gICAgICAgICAgICBvbGRfZGF0YSA9IHJlc1sncm93cydd WzBdCi0gICAgICAgICAgICBvbGRfZGF0YSA9IHNlbGYuX2Zvcm1hdHRlcihkaWQsIHNjaWQsIHRp ZCwgb2xkX2RhdGEpCi0KLSAgICAgICAgICAgICMgV2Ugd2lsbCBjb252ZXJ0IHByaXZpbGVnZXMg Y29taW5nIGZyb20gY2xpZW50IHJlcXVpcmVkCi0gICAgICAgICAgICBpZiAncmVsYWNsJyBpbiBk YXRhOgotICAgICAgICAgICAgICAgIGZvciBtb2RlIGluIFsnYWRkZWQnLCAnY2hhbmdlZCcsICdk ZWxldGVkJ106Ci0gICAgICAgICAgICAgICAgICAgIGlmIG1vZGUgaW4gZGF0YVsncmVsYWNsJ106 Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydyZWxhY2wnXVttb2RlXSA9IHBhcnNlX3By aXZfdG9fZGIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsncmVsYWNsJ11bbW9k ZV0sIHNlbGYuYWNsCi0gICAgICAgICAgICAgICAgICAgICAgICApCi0KLSAgICAgICAgICAgICMg SWYgbmFtZSBpcyBub3QgcHJlc2VudCBpbiByZXF1ZXN0IGRhdGEKLSAgICAgICAgICAgIGlmICdu YW1lJyBub3QgaW4gZGF0YToKLSAgICAgICAgICAgICAgICBkYXRhWyduYW1lJ10gPSBvbGRfZGF0 YVsnbmFtZSddCi0KLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLmNoZWNrX2FuZF9jb252ZXJ0X25h bWVfdG9fc3RyaW5nKGRhdGEpCi0KLSAgICAgICAgICAgICMgSWYgbmFtZSBpZiBub3QgcHJlc2Vu dAotICAgICAgICAgICAgaWYgJ3NjaGVtYScgbm90IGluIGRhdGE6Ci0gICAgICAgICAgICAgICAg ZGF0YVsnc2NoZW1hJ10gPSBvbGRfZGF0YVsnc2NoZW1hJ10KLQotICAgICAgICAgICAgIyBGaWx0 ZXIgb3V0IG5ldyB0YWJsZXMgZnJvbSBsaXN0LCB3ZSB3aWxsIHNlbmQgY29tcGxldGUgbGlzdAot ICAgICAgICAgICAgIyBhbmQgbm90IG5ld2x5IGFkZGVkIHRhYmxlcyBpbiB0aGUgbGlzdCBmcm9t IGNsaWVudAotICAgICAgICAgICAgIyBzbyB3ZSB3aWxsIGZpbHRlciBuZXcgdGFibGVzIGhlcmUK LSAgICAgICAgICAgIGlmICdjb2xsX2luaGVyaXRzJyBpbiBkYXRhOgotICAgICAgICAgICAgICAg IHBfbGVuID0gbGVuKG9sZF9kYXRhWydjb2xsX2luaGVyaXRzJ10pCi0gICAgICAgICAgICAgICAg Y19sZW4gPSBsZW4oZGF0YVsnY29sbF9pbmhlcml0cyddKQotICAgICAgICAgICAgICAgICMgSWYg dGFibGUocykgYWRkZWQKLSAgICAgICAgICAgICAgICBpZiBjX2xlbiA+IHBfbGVuOgotICAgICAg ICAgICAgICAgICAgICBkYXRhWydjb2xsX2luaGVyaXRzX2FkZGVkJ10gPSBsaXN0KAotICAgICAg ICAgICAgICAgICAgICAgICAgc2V0KGRhdGFbJ2NvbGxfaW5oZXJpdHMnXSkgLSBzZXQob2xkX2Rh dGFbJ2NvbGxfaW5oZXJpdHMnXSkKLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAg ICAgICMgSWYgdGFibGUocylyZW1vdmVkCi0gICAgICAgICAgICAgICAgZWxpZiBjX2xlbiA8IHBf bGVuOgotICAgICAgICAgICAgICAgICAgICBkYXRhWydjb2xsX2luaGVyaXRzX3JlbW92ZWQnXSA9 IGxpc3QoCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXQob2xkX2RhdGFbJ2NvbGxfaW5oZXJp dHMnXSkgLSBzZXQoZGF0YVsnY29sbF9pbmhlcml0cyddKQotICAgICAgICAgICAgICAgICAgICAp Ci0gICAgICAgICAgICAgICAgIyBTYWZlIHNpZGUgdmVyaWZpY2F0aW9uLEluIGNhc2UgaXQgaGFw cGVucy4uCi0gICAgICAgICAgICAgICAgIyBJZiB1c2VyIHJlbW92ZXMgYW5kIGFkZHMgc2FtZSBu dW1iZXIgb2YgdGFibGUKLSAgICAgICAgICAgICAgICAjIGVnIHJlbW92ZWQgb25lIHRhYmxlIGFu ZCBhZGRlZCBvbmUgbmV3IHRhYmxlCi0gICAgICAgICAgICAgICAgZWxpZiBjX2xlbiA9PSBwX2xl bjoKLSAgICAgICAgICAgICAgICAgICAgZGF0YVsnY29sbF9pbmhlcml0c19hZGRlZCddID0gbGlz dCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldChkYXRhWydjb2xsX2luaGVyaXRzJ10pIC0g c2V0KG9sZF9kYXRhWydjb2xsX2luaGVyaXRzJ10pCi0gICAgICAgICAgICAgICAgICAgICkKLSAg ICAgICAgICAgICAgICAgICAgZGF0YVsnY29sbF9pbmhlcml0c19yZW1vdmVkJ10gPSBsaXN0KAot ICAgICAgICAgICAgICAgICAgICAgICAgc2V0KG9sZF9kYXRhWydjb2xsX2luaGVyaXRzJ10pIC0g c2V0KGRhdGFbJ2NvbGxfaW5oZXJpdHMnXSkKLSAgICAgICAgICAgICAgICAgICAgKQotCi0gICAg ICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0 aCwgJ3VwZGF0ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb19k YXRhPW9sZF9kYXRhLCBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25uKQotICAgICAgICAgICAgIyBS ZW1vdmVzIHRyYWluaW5nIG5ldyBsaW5lcwotICAgICAgICAgICAgU1FMID0gU1FMLnN0cmlwKCdc bicpICsgJ1xuXG4nCi0KLSAgICAgICAgICAgICMgUGFyc2UvRm9ybWF0IGNvbHVtbnMgJiBjcmVh dGUgc3FsCi0gICAgICAgICAgICBpZiAnY29sdW1ucycgaW4gZGF0YToKLSAgICAgICAgICAgICAg ICAjIFBhcnNlIHRoZSBkYXRhIGNvbWluZyBmcm9tIGNsaWVudAotICAgICAgICAgICAgICAgIGRh dGEgPSBzZWxmLl9wYXJzZV9mb3JtYXRfY29sdW1ucyhkYXRhLCBtb2RlPSdlZGl0JykKLQotICAg ICAgICAgICAgICAgIGNvbHVtbnMgPSBkYXRhWydjb2x1bW5zJ10KLSAgICAgICAgICAgICAgICBj b2x1bW5fc3FsID0gJ1xuJwotCi0gICAgICAgICAgICAgICAgIyBJZiBjb2x1bW4ocykgaXMvYXJl IGRlbGV0ZWQKLSAgICAgICAgICAgICAgICBpZiAnZGVsZXRlZCcgaW4gY29sdW1uczoKLSAgICAg ICAgICAgICAgICAgICAgZm9yIGMgaW4gY29sdW1uc1snZGVsZXRlZCddOgotICAgICAgICAgICAg ICAgICAgICAgICAgY1snc2NoZW1hJ10gPSBkYXRhWydzY2hlbWEnXQotICAgICAgICAgICAgICAg ICAgICAgICAgY1sndGFibGUnXSA9IGRhdGFbJ25hbWUnXQotICAgICAgICAgICAgICAgICAgICAg ICAgIyBTcWwgZm9yIGRyb3AgY29sdW1uCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAnaW5o ZXJpdGVkZnJvbScgbm90IGluIGM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1u X3NxbCArPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFtzZWxmLmNvbHVtbl90ZW1wbGF0ZV9wYXRoLCAnZGVsZXRlLnNxbCddKSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1jLCBjb25uPXNlbGYuY29ubikuc3Ry aXAoJ1xuJykgKyAnXG5cbicKLQotICAgICAgICAgICAgICAgICMgSWYgY29sdW1uKHMpIGlzL2Fy ZSBjaGFuZ2VkCi0gICAgICAgICAgICAgICAgIyBIZXJlIHdlIHdpbGwgYmUgbmVlZGluZyBwcmV2 aW91cyBwcm9wZXJ0aWVzIG9mIGNvbHVtbgotICAgICAgICAgICAgICAgICMgc28gdGhhdCB3ZSBj YW4gY29tcGFyZSAmIHVwZGF0ZSBpdAotICAgICAgICAgICAgICAgIGlmICdjaGFuZ2VkJyBpbiBj b2x1bW5zOgotICAgICAgICAgICAgICAgICAgICBmb3IgYyBpbiBjb2x1bW5zWydjaGFuZ2VkJ106 Ci0gICAgICAgICAgICAgICAgICAgICAgICBjWydzY2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCi0g ICAgICAgICAgICAgICAgICAgICAgICBjWyd0YWJsZSddID0gZGF0YVsnbmFtZSddCi0gICAgICAg ICAgICAgICAgICAgICAgICBpZiAnYXR0YWNsJyBpbiBjOgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNbJ2F0dGFjbCddID0gcGFyc2VfcHJpdl90b19kYihjWydhdHRhY2wnXSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs Zi5jb2x1bW5fYWNsKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzX3NxbCA9 IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5jb2x1bW5fdGVtcGxhdGVfcGF0aCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZD1jWydhdHRudW0nXSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNob3dfc3lzX29iamVjdHM9c2VsZi5ibHVlcHJpbnQuc2hvd19zeXN0ZW1fb2JqZWN0cwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQot Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRl X2RpY3QocHJvcGVydGllc19zcWwpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3Rh dHVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9cmVzKQotICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2RhdGEgPSBy ZXNbJ3Jvd3MnXVswXQotCi0gICAgICAgICAgICAgICAgICAgICAgICBvbGRfZGF0YVsnY2x0eXBl J10sIG9sZF9kYXRhWydoYXNTcXJCcmFja2V0J10gPSBzZWxmLl9jbHR5cGVfZm9ybWF0dGVyKG9s ZF9kYXRhWydjbHR5cGUnXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9kYXRhID0gc2Vs Zi5jb252ZXJ0X2xlbmd0aF9wcmVjaXNpb25fdG9fc3RyaW5nKG9sZF9kYXRhKQotCi0gICAgICAg ICAgICAgICAgICAgICAgICBmdWxsdHlwZSA9IHNlbGYuZ2V0X2Z1bGxfdHlwZSgKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvbGRfZGF0YVsndHlwbnNwbmFtZSddLCBvbGRfZGF0YVsndHlw bmFtZSddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9kYXRhWydpc2R1cCddLCBv bGRfZGF0YVsnYXR0bmRpbXMnXSwgb2xkX2RhdGFbJ2F0dHR5cG1vZCddCi0gICAgICAgICAgICAg ICAgICAgICAgICApCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgd2UgaGF2ZSBsZW5n dGggJiBwcmVjaXNpb24gYm90aAotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hPYmogPSBy ZS5zZWFyY2gocicoXGQrKSwoXGQrKScsIGZ1bGx0eXBlKQotICAgICAgICAgICAgICAgICAgICAg ICAgaWYgbWF0Y2hPYmo6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2RhdGFbJ2F0 dGxlbiddID0gaW50KG1hdGNoT2JqLmdyb3VwKDEpKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG9sZF9kYXRhWydhdHRwcmVjaXNpb24nXSA9IGludChtYXRjaE9iai5ncm91cCgyKSkKLSAg ICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBJZiB3ZSBoYXZlIGxlbmd0aCBvbmx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0 Y2hPYmogPSByZS5zZWFyY2gocicoXGQrKScsIGZ1bGx0eXBlKQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIG1hdGNoT2JqOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv bGRfZGF0YVsnYXR0bGVuJ10gPSBpbnQobWF0Y2hPYmouZ3JvdXAoMSkpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9sZF9kYXRhWydhdHRwcmVjaXNpb24nXSA9IE5vbmUKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvbGRfZGF0YVsnYXR0bGVuJ10gPSBOb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG9sZF9kYXRhWydhdHRwcmVjaXNpb24nXSA9IE5vbmUKLQotICAgICAgICAgICAgICAg ICAgICAgICAgb2xkX2RhdGFbJ2NsdHlwZSddID0gRGF0YVR5cGVSZWFkZXIucGFyc2VfdHlwZV9u YW1lKG9sZF9kYXRhWydjbHR5cGUnXSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgIyBTcWwg Zm9yIGFsdGVyIGNvbHVtbgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ2luaGVyaXRlZGZy b20nIG5vdCBpbiBjOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl9zcWwgKz0g cmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBbc2VsZi5jb2x1bW5fdGVtcGxhdGVfcGF0aCwgJ3VwZGF0ZS5zcWwnXSksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRhdGE9Yywgb19kYXRhPW9sZF9kYXRhLCBjb25uPXNlbGYu Y29ubikuc3RyaXAoJ1xuJykgKyAnXG5cbicKLQotICAgICAgICAgICAgICAgICMgSWYgY29sdW1u KHMpIGlzL2FyZSBhZGRlZAotICAgICAgICAgICAgICAgIGlmICdhZGRlZCcgaW4gY29sdW1uczoK LSAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gY29sdW1uc1snYWRkZWQnXToKLSAgICAgICAg ICAgICAgICAgICAgICAgIGNbJ3NjaGVtYSddID0gZGF0YVsnc2NoZW1hJ10KLSAgICAgICAgICAg ICAgICAgICAgICAgIGNbJ3RhYmxlJ10gPSBkYXRhWyduYW1lJ10KLSAgICAgICAgICAgICAgICAg ICAgICAgICMgU3FsIGZvciBjcmVhdGUgY29sdW1uCi0gICAgICAgICAgICAgICAgICAgICAgICBp ZiAnYXR0YWNsJyBpbiBjOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbJ2F0dGFjbCdd ID0gcGFyc2VfcHJpdl90b19kYihjWydhdHRhY2wnXSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2x1bW5fYWNsKQotCi0g ICAgICAgICAgICAgICAgICAgICAgICBjID0gc2VsZi5jb252ZXJ0X2xlbmd0aF9wcmVjaXNpb25f dG9fc3RyaW5nKGMpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICdpbmhlcml0ZWRmcm9t JyBub3QgaW4gYzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5fc3FsICs9IHJl bmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg W3NlbGYuY29sdW1uX3RlbXBsYXRlX3BhdGgsICdjcmVhdGUuc3FsJ10pLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkYXRhPWMsIGNvbm49c2VsZi5jb25uKS5zdHJpcCgnXG4nKSAr ICdcblxuJwotCi0gICAgICAgICAgICAgICAgIyBDb21iaW5lIGFsbCB0aGUgU1FMIHRvZ2V0aGVy Ci0gICAgICAgICAgICAgICAgU1FMICs9IGNvbHVtbl9zcWwuc3RyaXAoJ1xuJykKLQotICAgICAg ICAgICAgIyBDaGVjayBpZiBpbmRleCBjb25zdHJhaW50cyBhcmUgYWRkZWQvY2hhbmdlZC9kZWxl dGVkCi0gICAgICAgICAgICBpbmRleF9jb25zdHJhaW50X3NxbCA9IHNlbGYuZ2V0X2luZGV4X2Nv bnN0cmFpbnRfc3FsKGRpZCwgdGlkLCBkYXRhKQotICAgICAgICAgICAgIyBJZiB3ZSBoYXZlIGlu ZGV4IGNvbnN0cmFpbnQgc3FsIHRoZW4gYWQgaXQgaW4gbWFpbiBzcWwKLSAgICAgICAgICAgIGlm IGluZGV4X2NvbnN0cmFpbnRfc3FsIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIFNRTCAr PSAnXG4nICsgaW5kZXhfY29uc3RyYWludF9zcWwKLQotICAgICAgICAgICAgIyBDaGVjayBpZiBm b3JlaWduIGtleShzKSBpcy9hcmUgYWRkZWQvY2hhbmdlZC9kZWxldGVkCi0gICAgICAgICAgICBm b3JlaWduX2tleV9zcWwgPSBzZWxmLmdldF9mb3JlaWduX2tleV9zcWwodGlkLCBkYXRhKQotICAg ICAgICAgICAgIyBJZiB3ZSBoYXZlIGZvcmVpZ24ga2V5IHNxbCB0aGVuIGFkIGl0IGluIG1haW4g c3FsCi0gICAgICAgICAgICBpZiBmb3JlaWduX2tleV9zcWwgaXMgbm90IE5vbmU6Ci0gICAgICAg ICAgICAgICAgU1FMICs9ICdcbicgKyBmb3JlaWduX2tleV9zcWwKLQotICAgICAgICAgICAgIyBD aGVjayBpZiBjaGVjayBjb25zdHJhaW50KHMpIGlzL2FyZSBhZGRlZC9jaGFuZ2VkL2RlbGV0ZWQK LSAgICAgICAgICAgIGNoZWNrX2NvbnN0cmFpbnRfc3FsID0gc2VsZi5nZXRfY2hlY2tfY29uc3Ry YWludF9zcWwodGlkLCBkYXRhKQotICAgICAgICAgICAgIyBJZiB3ZSBoYXZlIGNoZWNrIGNvbnN0 cmFpbnQgc3FsIHRoZW4gYWQgaXQgaW4gbWFpbiBzcWwKLSAgICAgICAgICAgIGlmIGNoZWNrX2Nv bnN0cmFpbnRfc3FsIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIFNRTCArPSAnXG4nICsg Y2hlY2tfY29uc3RyYWludF9zcWwKLQotICAgICAgICAgICAgIyBDaGVjayBpZiBleGNsdXNpb24g Y29uc3RyYWludChzKSBpcy9hcmUgYWRkZWQvY2hhbmdlZC9kZWxldGVkCi0gICAgICAgICAgICBl eGNsdXNpb25fY29uc3RyYWludF9zcWwgPSBzZWxmLmdldF9leGNsdXNpb25fY29uc3RyYWludF9z cWwoZGlkLCB0aWQsIGRhdGEpCi0gICAgICAgICAgICAjIElmIHdlIGhhdmUgY2hlY2sgY29uc3Ry YWludCBzcWwgdGhlbiBhZCBpdCBpbiBtYWluIHNxbAotICAgICAgICAgICAgaWYgZXhjbHVzaW9u X2NvbnN0cmFpbnRfc3FsIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIFNRTCArPSAnXG4n ICsgZXhjbHVzaW9uX2NvbnN0cmFpbnRfc3FsCi0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg IHJlcXVpcmVkX2FyZ3MgPSBbCi0gICAgICAgICAgICAgICAgJ25hbWUnCi0gICAgICAgICAgICBd Ci0KLSAgICAgICAgICAgIGZvciBhcmcgaW4gcmVxdWlyZWRfYXJnczoKLSAgICAgICAgICAgICAg ICBpZiBhcmcgbm90IGluIGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXR0ZXh0 KCctLSBkZWZpbml0aW9uIGluY29tcGxldGUnKQotCi0gICAgICAgICAgICAjIHZhbGlkYXRlIGNv bnN0cmFpbnQgZGF0YS4KLSAgICAgICAgICAgIGZvciBrZXkgaW4gWydwcmltYXJ5X2tleScsICd1 bmlxdWVfY29uc3RyYWludCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAnZm9yZWlnbl9rZXkn LCAnY2hlY2tfY29uc3RyYWludCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAnZXhjbHVkZV9j b25zdHJhaW50J106Ci0gICAgICAgICAgICAgICAgaWYga2V5IGluIGRhdGEgYW5kIGxlbihkYXRh W2tleV0pID4gMDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIGNvbnN0cmFpbnQgaW4gZGF0YVtr ZXldOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYudmFsaWRhdGVfY29uc3Ry YWlucyhrZXksIGNvbnN0cmFpbnQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBnZXR0ZXh0KCctLSBkZWZpbml0aW9uIGluY29tcGxldGUgZm9yIHswfScuZm9ybWF0KGtleSkp Ci0KLSAgICAgICAgICAgICMgV2Ugd2lsbCBjb252ZXJ0IHByaXZpbGVnZXMgY29taW5nIGZyb20g Y2xpZW50IHJlcXVpcmVkCi0gICAgICAgICAgICAjIGluIHNlcnZlciBzaWRlIGZvcm1hdAotICAg ICAgICAgICAgaWYgJ3JlbGFjbCcgaW4gZGF0YToKLSAgICAgICAgICAgICAgICBkYXRhWydyZWxh Y2wnXSA9IHBhcnNlX3ByaXZfdG9fZGIoZGF0YVsncmVsYWNsJ10sIHNlbGYuYWNsKQotCi0gICAg ICAgICAgICAjIFBhcnNlICYgZm9ybWF0IGNvbHVtbnMKLSAgICAgICAgICAgIGRhdGEgPSBzZWxm Ll9wYXJzZV9mb3JtYXRfY29sdW1ucyhkYXRhKQotICAgICAgICAgICAgZGF0YSA9IHNlbGYuY2hl Y2tfYW5kX2NvbnZlcnRfbmFtZV90b19zdHJpbmcoZGF0YSkKLQotICAgICAgICAgICAgaWYgJ2Zv cmVpZ25fa2V5JyBpbiBkYXRhOgotICAgICAgICAgICAgICAgIGZvciBjIGluIGRhdGFbJ2ZvcmVp Z25fa2V5J106Ci0gICAgICAgICAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIu am9pbihbc2VsZi5mb3JlaWduX2tleV90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfcGFyZW50LnNxbCddKSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZD1jWydjb2x1bW5zJ11b MF1bJ3JlZmVyZW5jZXMnXSkKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCByc2V0ID0gc2Vs Zi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBz dGF0dXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXJzZXQpCi0KLSAgICAgICAgICAgICAgICAgICAgY1sncmVtb3RlX3NjaGVt YSddID0gcnNldFsncm93cyddWzBdWydzY2hlbWEnXQotICAgICAgICAgICAgICAgICAgICBjWydy ZW1vdGVfdGFibGUnXSA9IHJzZXRbJ3Jvd3MnXVswXVsndGFibGUnXQotCi0gICAgICAgICAgICAj IElmIHRoZSByZXF1ZXN0IGZvciBuZXcgb2JqZWN0IHdoaWNoIGRvIG5vdCBoYXZlIGRpZAotICAg ICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3Bh dGgsICdjcmVhdGUuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh dGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCisgICAgICAgIFNRTCwgbmFtZSA9IHNlbGYuZ2V0X3Nx bChkaWQsIHNjaWQsIHRpZCwgZGF0YSwgcmVzKQogICAgICAgICBTUUwgPSByZS5zdWIoJ1xuezIs fScsICdcblxuJywgU1FMKQogICAgICAgICBTUUwgPSBTUUwuc3RyaXAoJ1xuJykKKyAgICAgICAg aWYgU1FMID09ICcnOgorICAgICAgICAgICAgU1FMID0gIi0tbW9kaWZpZWQgU1FMIgorICAgICAg ICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgZGF0YT1TUUwsCisgICAg ICAgICAgICBzdGF0dXM9MjAwCisgICAgICAgICkKIAotICAgICAgICByZXR1cm4gU1FMLCBkYXRh WyduYW1lJ10gaWYgJ25hbWUnIGluIGRhdGEgZWxzZSBvbGRfZGF0YVsnbmFtZSddCi0KLSAgICBA c3RhdGljbWV0aG9kCi0gICAgZGVmIHZhbGlkYXRlX2NvbnN0cmFpbnMoa2V5LCBkYXRhKToKLQot ICAgICAgICBpZiBrZXkgPT0gJ3ByaW1hcnlfa2V5JyBvciBrZXkgPT0gJ3VuaXF1ZV9jb25zdHJh aW50JzoKLSAgICAgICAgICAgIGlmICdjb2x1bW5zJyBpbiBkYXRhIGFuZCBsZW4oZGF0YVsnY29s dW1ucyddKSA+IDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgIGVs c2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGVsaWYga2V5ID09ICdm b3JlaWduX2tleSc6Ci0gICAgICAgICAgICBpZiAnb2lkJyBub3QgaW4gZGF0YToKLSAgICAgICAg ICAgICAgICBmb3IgYXJnIGluIFsnY29sdW1ucyddOgotICAgICAgICAgICAgICAgICAgICBpZiBh cmcgbm90IGluIGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAg ICAgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRhdGFbYXJnXSwgbGlzdCkgYW5kIGxl bihkYXRhW2FyZ10pIDwgMToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQot Ci0gICAgICAgICAgICAgICAgaWYgJ2F1dG9pbmRleCcgaW4gZGF0YSBhbmQgZGF0YVsnYXV0b2lu ZGV4J10gYW5kIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICgnY292ZXJpbmdpbmRleCcgbm90 IGluIGRhdGEgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGF0YVsnY292ZXJpbmdpbmRleCddID09ICcnKToKLSAgICAgICAgICAgICAgICAgICAg cmV0dXJuIEZhbHNlCi0KLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgZWxpZiBr ZXkgPT0gJ2NoZWNrX2NvbnN0cmFpbnQnOgotICAgICAgICAgICAgZm9yIGFyZyBpbiBbJ2NvbnNy YyddOgotICAgICAgICAgICAgICAgIGlmIGFyZyBub3QgaW4gZGF0YSBvciBkYXRhW2FyZ10gPT0g Jyc6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgcmV0dXJu IFRydWUKLQotICAgICAgICBlbGlmIGtleSA9PSAnZXhjbHVkZV9jb25zdHJhaW50JzoKLSAgICAg ICAgICAgIHBhc3MKLQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgQGNoZWNrX3ByZWNvbmRp dGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBkZXBl bmRlbnRzKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCk6CiAgICAgICAgICIiIgogICAg ICAgICBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgZGVwZW5kZW50cyBhbmQgcmV0dXJuIGFqYXggcmVz cG9uc2UKQEAgLTI0NjAsNDMgKzExOTksOSBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVW aWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgc2NpZDog U2NoZW1hIElECiAgICAgICAgICAgICB0aWQ6IFRhYmxlIElECiAgICAgICAgICIiIgotICAgICAg ICAjIFNwZWNpZmljIGNvbmRpdGlvbiBmb3IgY29sdW1uIHdoaWNoIHdlIG5lZWQgdG8gYXBwZW5k Ci0gICAgICAgIHdoZXJlID0gIldIRVJFIGRlcC5yZWZvYmppZD17MH06Ok9JRCIuZm9ybWF0KHRp ZCkKKyAgICAgICAgcmV0dXJuIEJhc2VUYWJsZVZpZXcuZ2V0X3RhYmxlX2RlcGVuZGVudHMoc2Vs ZiwgdGlkKQogCi0gICAgICAgIGRlcGVuZGVudHNfcmVzdWx0ID0gc2VsZi5nZXRfZGVwZW5kZW50 cygKLSAgICAgICAgICAgIHNlbGYuY29ubiwgdGlkCi0gICAgICAgICkKLQotICAgICAgICAjIFNw ZWNpZmljIHNxbCB0byBydW4gYWdhaW50IGNvbHVtbiB0byBmZXRjaCBkZXBlbmRlbnRzCi0gICAg ICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXBlbmQuc3FsJ10pLCB3 aGVyZT13aGVyZSkKLQotICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2Rp Y3QoU1FMKQotICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgcmV0dXJuIGludGVy bmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCi0KLSAgICAgICAgZm9yIHJvdyBpbiByZXNb J3Jvd3MnXToKLSAgICAgICAgICAgIHJlZl9uYW1lID0gcm93WydyZWZuYW1lJ10KLSAgICAgICAg ICAgIGlmIHJlZl9uYW1lIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAg ICAgICAgICAgZGVwX3R5cGUgPSAnJwotICAgICAgICAgICAgZGVwX3N0ciA9IHJvd1snZGVwdHlw ZSddCi0gICAgICAgICAgICBpZiBkZXBfc3RyID09ICdhJzoKLSAgICAgICAgICAgICAgICBkZXBf dHlwZSA9ICdhdXRvJwotICAgICAgICAgICAgZWxpZiBkZXBfc3RyID09ICduJzoKLSAgICAgICAg ICAgICAgICBkZXBfdHlwZSA9ICdub3JtYWwnCi0gICAgICAgICAgICBlbGlmIGRlcF9zdHIgPT0g J2knOgotICAgICAgICAgICAgICAgIGRlcF90eXBlID0gJ2ludGVybmFsJwotCi0gICAgICAgICAg ICBkZXBlbmRlbnRzX3Jlc3VsdC5hcHBlbmQoeyd0eXBlJzogJ3NlcXVlbmNlJywgJ25hbWUnOiBy ZWZfbmFtZSwgJ2ZpZWxkJzogZGVwX3R5cGV9KQotCi0gICAgICAgIHJldHVybiBhamF4X3Jlc3Bv bnNlKAotICAgICAgICAgICAgcmVzcG9uc2U9ZGVwZW5kZW50c19yZXN1bHQsCi0gICAgICAgICAg ICBzdGF0dXM9MjAwCi0gICAgICAgICkKLQotICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBA QmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KICAgICBkZWYgZGVwZW5kZW5jaWVzKHNl bGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCk6CiAgICAgICAgICIiIgogICAgICAgICBUaGlz IGZ1bmN0aW9uIGdldCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZXR1cm4gYWpheCByZXNwb25zZQpA QCAtMjUwOCwxOCArMTIxMywxMCBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBE YXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgZGlkOiBEYXRhYmFz ZSBJRAogICAgICAgICAgICAgc2NpZDogU2NoZW1hIElECiAgICAgICAgICAgICB0aWQ6IFRhYmxl IElECi0KICAgICAgICAgIiIiCi0gICAgICAgIGRlcGVuZGVuY2llc19yZXN1bHQgPSBzZWxmLmdl dF9kZXBlbmRlbmNpZXMoCi0gICAgICAgICAgICBzZWxmLmNvbm4sIHRpZAotICAgICAgICApCi0K LSAgICAgICAgcmV0dXJuIGFqYXhfcmVzcG9uc2UoCi0gICAgICAgICAgICByZXNwb25zZT1kZXBl bmRlbmNpZXNfcmVzdWx0LAotICAgICAgICAgICAgc3RhdHVzPTIwMAotICAgICAgICApCisgICAg ICAgIHJldHVybiBCYXNlVGFibGVWaWV3LmdldF90YWJsZV9kZXBlbmRlbmNpZXMoc2VsZiwgdGlk KQogCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3By ZWNvbmRpdGlvbgogICAgIGRlZiBzcWwoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkKToK ICAgICAgICAgIiIiCiAgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGVzIHJldmVyc2Ug ZW5naW5lZXJlZCBzcWwgZm9yCkBAIC0yNTM0LDE1ICsxMjMxLDExIEBAIGNsYXNzIFRhYmxlVmll dyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAg ICAgICIiIgogICAgICAgICBtYWluX3NxbCA9IFtdCiAKLSAgICAgICAgIiIiCi0gICAgICAgICMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgIyAxKSBSZXZlcnNl IGVuZ2luZWVyZWQgc3FsIGZvciBUQUJMRQotICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICIiIgotICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxh dGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkaWQ9ZGlkLCBzY2lkPXNjaWQsIHRpZD10aWQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKKyAgICAgICAg U1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGFibGVf dGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAgZGlkPWRpZCwg c2NpZD1zY2lkLCB0aWQ9dGlkLAorICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxh c3RzeXNvaWQKKyAgICAgICAgKQogICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVj dXRlX2RpY3QoU1FMKQogICAgICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgcmV0dXJu IGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCkBAIC0yNTUyLDI1MCArMTI0NSwx MCBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFj dXVtU2V0dGluZ3MpOgogCiAgICAgICAgIGRhdGEgPSByZXNbJ3Jvd3MnXVswXQogCi0gICAgICAg ICMgVGFibGUgJiBTY2hlbWEgZGVjbGFyYXRpb24gc28gdGhhdCB3ZSBjYW4gdXNlIHRoZW0gaW4g Y2hpbGQgbm9kZXMKLSAgICAgICAgc2NoZW1hID0gZGF0YVsnc2NoZW1hJ10KLSAgICAgICAgdGFi bGUgPSBkYXRhWyduYW1lJ10KLQotICAgICAgICBkYXRhID0gc2VsZi5fZm9ybWF0dGVyKGRpZCwg c2NpZCwgdGlkLCBkYXRhKQotCi0gICAgICAgICMgTm93IHdlIGhhdmUgYWxsIGxpcyBvZiBjb2x1 bW5zIHdoaWNoIHdlIG5lZWQKLSAgICAgICAgIyB0byBpbmNsdWRlIGluIG91ciBjcmVhdGUgZGVm aW5pdGlvbiwgTGV0J3MgZm9ybWF0IHRoZW0KLSAgICAgICAgaWYgJ2NvbHVtbnMnIGluIGRhdGE6 Ci0gICAgICAgICAgICBmb3IgYyBpbiBkYXRhWydjb2x1bW5zJ106Ci0gICAgICAgICAgICAgICAg aWYgJ2F0dGFjbCcgaW4gYzoKLSAgICAgICAgICAgICAgICAgICAgY1snYXR0YWNsJ10gPSBwYXJz ZV9wcml2X3RvX2RiKGNbJ2F0dGFjbCddLCBzZWxmLmNvbHVtbl9hY2wpCi0KLSAgICAgICAgICAg ICAgICAjIGNoZWNrIHR5cGUgZm9yICdbXScgaW4gaXQKLSAgICAgICAgICAgICAgICBpZiAnY2x0 eXBlJyBpbiBjOgotICAgICAgICAgICAgICAgICAgICBjWydjbHR5cGUnXSwgY1snaGFzU3FyQnJh Y2tldCddID0gc2VsZi5fY2x0eXBlX2Zvcm1hdHRlcihjWydjbHR5cGUnXSkKLQotICAgICAgICBz cWxfaGVhZGVyID0gdSItLSBUYWJsZTogezB9XG5cbi0tICIuZm9ybWF0KHNlbGYucXRJZGVudChz ZWxmLmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGF0YVsnc2NoZW1hJ10sCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnbmFtZSddKSkK LQotICAgICAgICBzcWxfaGVhZGVyICs9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50 ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ2RlbGV0ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCi0KLSAgICAgICAgc3FsX2hlYWRlciA9IHNx bF9oZWFkZXIuc3RyaXAoJ1xuJykKLSAgICAgICAgc3FsX2hlYWRlciArPSAnXG4nCi0KLSAgICAg ICAgIyBBZGQgaW50byBtYWluIHNxbAotICAgICAgICBtYWluX3NxbC5hcHBlbmQoc3FsX2hlYWRl cikKLQotICAgICAgICAjIFBhcnNlIHByaXZpbGVnZSBkYXRhCi0gICAgICAgIGlmICdyZWxhY2wn IGluIGRhdGE6Ci0gICAgICAgICAgICBkYXRhWydyZWxhY2wnXSA9IHBhcnNlX3ByaXZfdG9fZGIo ZGF0YVsncmVsYWNsJ10sIHNlbGYuYWNsKQotCi0gICAgICAgICMgSWYgdGhlIHJlcXVlc3QgZm9y IG5ldyBvYmplY3Qgd2hpY2ggZG8gbm90IGhhdmUgZGlkCi0gICAgICAgIHRhYmxlX3NxbCA9IHJl bmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGUuc3FsJ10pLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBjb25uPXNlbGYuY29ubiwg aXNfc3FsPVRydWUpCi0KLSAgICAgICAgIyBBZGQgaW50byBtYWluIHNxbAotICAgICAgICB0YWJs ZV9zcWwgPSByZS5zdWIoJ1xuezIsfScsICdcblxuJywgdGFibGVfc3FsKQotICAgICAgICBtYWlu X3NxbC5hcHBlbmQodGFibGVfc3FsLnN0cmlwKCdcbicpKQotCi0gICAgICAgICIiIgotICAgICAg ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICAjIDIpIFJl dmVyc2UgZW5naW5lZXJlZCBzcWwgZm9yIElOREVYCi0gICAgICAgICMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICIiIgotCi0gICAgICAgIFNRTCA9IHJlbmRl cl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5pbmRleF90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub2Rlcy5zcWwnXSksIHRpZD10aWQpCi0g ICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQotICAg ICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9l cnJvcihlcnJvcm1zZz1yc2V0KQorICAgICAgICByZXR1cm4gQmFzZVRhYmxlVmlldy5nZXRfcmV2 ZXJzZV9lbmdpbmVlcmVkX3NxbCgKKyAgICAgICAgICAgIHNlbGYsIGRpZCwgc2NpZCwgdGlkLCBt YWluX3NxbCwgZGF0YSkKIAotICAgICAgICBmb3Igcm93IGluIHJzZXRbJ3Jvd3MnXToKLQotICAg ICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmluZGV4X3RlbXBs YXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdw cm9wZXJ0aWVzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWQ9 ZGlkLCB0aWQ9dGlkLCBpZHg9cm93WydvaWQnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKLQotICAgICAgICAgICAg c3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKLSAgICAgICAgICAgIGlm IG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1yZXMpCi0KLSAgICAgICAgICAgIGRhdGEgPSBkaWN0KHJlc1sncm93cyddWzBd KQotICAgICAgICAgICAgIyBBZGRpbmcgcGFyZW50IGludG8gZGF0YSBkaWN0LCB3aWxsIGJlIHVz aW5nIGl0IHdoaWxlIGNyZWF0aW5nIHNxbAotICAgICAgICAgICAgZGF0YVsnc2NoZW1hJ10gPSBz Y2hlbWEKLSAgICAgICAgICAgIGRhdGFbJ3RhYmxlJ10gPSB0YWJsZQotICAgICAgICAgICAgIyBX ZSBhbHNvIG5lZWQgdG8gZmVjdGggY29sdW1ucyBvZiBpbmRleAotICAgICAgICAgICAgU1FMID0g cmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmluZGV4X3RlbXBsYXRlX3BhdGgsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2x1bW5fZGV0YWlscy5z cWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4PXJvd1snb2lkJ10p Ci0gICAgICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNR TCkKLSAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlu dGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQotCi0gICAgICAgICAgICAjICdhdHRk ZWYnIGNvbWVzIHdpdGggcXVvdGVzIGZyb20gcXVlcnkgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVt Ci0gICAgICAgICAgICAjICdvcHRpb25zJyB3ZSBuZWVkIHRydWUvZmFsc2UgdG8gcmVuZGVyIHN3 aXRjaCBBU0MoZmFsc2UpL0RFU0ModHJ1ZSkKLSAgICAgICAgICAgIGNvbHVtbnMgPSBbXQotICAg ICAgICAgICAgY29scyA9IFtdCi0gICAgICAgICAgICBmb3IgY29sX3JvdyBpbiByc2V0Wydyb3dz J106Ci0gICAgICAgICAgICAgICAgIyBXZSBuZWVkIGFsbCBkYXRhIGFzIGNvbGxlY3Rpb24gZm9y IENvbHVtbnNNb2RlbAotICAgICAgICAgICAgICAgIGNvbHNfZGF0YSA9IHsKLSAgICAgICAgICAg ICAgICAgICAgJ2NvbG5hbWUnOiBjb2xfcm93WydhdHRkZWYnXS5zdHJpcCgnIicpLAotICAgICAg ICAgICAgICAgICAgICAnY29sbHNwY25hbWUnOiBjb2xfcm93Wydjb2xsbnNwbmFtZSddLAotICAg ICAgICAgICAgICAgICAgICAnb3BfY2xhc3MnOiBjb2xfcm93WydvcGNuYW1lJ10sCi0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIGNvbF9yb3dbJ29wdGlvbnMnXVswXSA9PSAn REVTQyc6Ci0gICAgICAgICAgICAgICAgICAgIGNvbHNfZGF0YVsnc29ydF9vcmRlciddID0gVHJ1 ZQotICAgICAgICAgICAgICAgIGNvbHVtbnMuYXBwZW5kKGNvbHNfZGF0YSkKLQotICAgICAgICAg ICAgICAgICMgV2UgbmVlZCBzYW1lIGRhdGEgYXMgc3RyaW5nIHRvIGRpc3BsYXkgaW4gcHJvcGVy dGllcyB3aW5kb3cKLSAgICAgICAgICAgICAgICAjIElmIG11bHRpcGxlIGNvbHVtbiB0aGVuIHNl cGFyYXRlIGl0IGJ5IGNvbG9uCi0gICAgICAgICAgICAgICAgY29sc19zdHIgPSBjb2xfcm93Wydh dHRkZWYnXQotICAgICAgICAgICAgICAgIGlmIGNvbF9yb3dbJ2NvbGxuc3BuYW1lJ106Ci0gICAg ICAgICAgICAgICAgICAgIGNvbHNfc3RyICs9ICcgQ09MTEFURSAnICsgY29sX3Jvd1snY29sbG5z cG5hbWUnXQotICAgICAgICAgICAgICAgIGlmIGNvbF9yb3dbJ29wY25hbWUnXToKLSAgICAgICAg ICAgICAgICAgICAgY29sc19zdHIgKz0gJyAnICsgY29sX3Jvd1snb3BjbmFtZSddCi0gICAgICAg ICAgICAgICAgaWYgY29sX3Jvd1snb3B0aW9ucyddWzBdID09ICdERVNDJzoKLSAgICAgICAgICAg ICAgICAgICAgY29sc19zdHIgKz0gJyBERVNDJwotICAgICAgICAgICAgICAgIGNvbHMuYXBwZW5k KGNvbHNfc3RyKQotCi0gICAgICAgICAgICAjIFB1c2ggYXMgY29sbGVjdGlvbgotICAgICAgICAg ICAgZGF0YVsnY29sdW1ucyddID0gY29sdW1ucwotICAgICAgICAgICAgIyBQdXNoIGFzIHN0cmlu ZwotICAgICAgICAgICAgZGF0YVsnY29scyddID0gJywgJy5qb2luKGNvbHMpCi0KLSAgICAgICAg ICAgIHNxbF9oZWFkZXIgPSB1IlxuLS0gSW5kZXg6IHswfVxuXG4tLSAiLmZvcm1hdChkYXRhWydu YW1lJ10pCi0KLSAgICAgICAgICAgIHNxbF9oZWFkZXIgKz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKFtzZWxmLmluZGV4X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlbGV0ZS5zcWwnXSksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25uKQot Ci0gICAgICAgICAgICBpbmRleF9zcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYu aW5kZXhfdGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ2NyZWF0ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBjb25uPXNlbGYuY29ubikKLSAgICAgICAgICAgIGlu ZGV4X3NxbCArPSAiXG4iCi0gICAgICAgICAgICBpbmRleF9zcWwgKz0gcmVuZGVyX3RlbXBsYXRl KCIvIi5qb2luKFtzZWxmLmluZGV4X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWx0ZXIuc3FsJ10pLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25u KQotCi0gICAgICAgICAgICAjIEFkZCBpbnRvIG1haW4gc3FsCi0gICAgICAgICAgICBpbmRleF9z cWwgPSByZS5zdWIoJ1xuezIsfScsICdcblxuJywgaW5kZXhfc3FsKQotICAgICAgICAgICAgbWFp bl9zcWwuYXBwZW5kKHNxbF9oZWFkZXIgKyAnXG5cbicgKyBpbmRleF9zcWwuc3RyaXAoJ1xuJykp Ci0KLSAgICAgICAgIiIiCi0gICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKLSAgICAgICAgIyAzKSBSZXZlcnNlIGVuZ2luZWVyZWQgc3FsIGZvciBUUklHR0VS UwotICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAg ICAgICIiIgotICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudHJp Z2dlcl90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdub2Rlcy5zcWwnXSksIHRpZD10aWQpCi0gICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYu Y29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQotICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAg ICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQotCi0gICAg ICAgIGZvciByb3cgaW4gcnNldFsncm93cyddOgotICAgICAgICAgICAgdHJpZ2dlcl9zcWwgPSAn JwotCi0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudHJp Z2dlcl90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGlkPXRpZCwgdHJpZD1yb3dbJ29pZCddLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkKQotCi0gICAgICAgICAg ICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQotICAgICAgICAgICAg aWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXJlcykKLQotICAgICAgICAgICAgZGF0YSA9IGRpY3QocmVzWydyb3dzJ11b MF0pCi0gICAgICAgICAgICAjIEFkZGluZyBwYXJlbnQgaW50byBkYXRhIGRpY3QsIHdpbGwgYmUg dXNpbmcgaXQgd2hpbGUgY3JlYXRpbmcgc3FsCi0gICAgICAgICAgICBkYXRhWydzY2hlbWEnXSA9 IHNjaGVtYQotICAgICAgICAgICAgZGF0YVsndGFibGUnXSA9IHRhYmxlCi0KLSAgICAgICAgICAg IGRhdGEgPSBzZWxmLmdldF90cmlnZ2VyX2Z1bmN0aW9uX3NjaGVtYShkYXRhKQotCi0gICAgICAg ICAgICBpZiBsZW4oZGF0YVsnY3VzdG9tX3RnYXJncyddKSA+IDE6Ci0gICAgICAgICAgICAgICAg IyBXZSBrbm93IHRoYXQgdHJpZ2dlciBoYXMgbW9yZSB0aGFuIDEgYXJndW1lbnQsIGxldCdzIGpv aW4gdGhlbQotICAgICAgICAgICAgICAgIGRhdGFbJ3RnYXJncyddID0gc2VsZi5fZm9ybWF0X2Fy Z3MoZGF0YVsnY3VzdG9tX3RnYXJncyddKQotCi0gICAgICAgICAgICBpZiBsZW4oZGF0YVsndGdh dHRyJ10pID4gMToKLSAgICAgICAgICAgICAgICBjb2x1bW5zID0gJywgJy5qb2luKGRhdGFbJ3Rn YXR0ciddLnNwbGl0KCcgJykpCi0KLSAgICAgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxh dGUoIi8iLmpvaW4oW3NlbGYudHJpZ2dlcl90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9jb2x1bW5zLnNxbCddKSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCwgY2xpc3Q9Y29sdW1u cykKLQotICAgICAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJk YXJyYXkoU1FMKQotICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cnNldCkKLSAgICAg ICAgICAgICAgICAjICd0Z2F0dHInIGNvbnRhaW5zIGxpc3Qgb2YgY29sdW1ucyBmcm9tIHRhYmxl IHVzZWQgaW4gdHJpZ2dlcgotICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBbXQotCi0gICAgICAg ICAgICAgICAgZm9yIGNvbF9yb3cgaW4gcnNldFsncm93cyddOgotICAgICAgICAgICAgICAgICAg ICBjb2x1bW5zLmFwcGVuZCh7J2NvbHVtbic6IGNvbF9yb3dbJ25hbWUnXX0pCi0KLSAgICAgICAg ICAgICAgICBkYXRhWydjb2x1bW5zJ10gPSBjb2x1bW5zCi0KLSAgICAgICAgICAgIGRhdGEgPSB0 cmlnZ2VyX2RlZmluaXRpb24oZGF0YSkKLQotICAgICAgICAgICAgc3FsX2hlYWRlciA9IHUiXG4t LSBUcmlnZ2VyOiB7MH1cblxuLS0gIi5mb3JtYXQoZGF0YVsnbmFtZSddKQotCi0gICAgICAgICAg ICBzcWxfaGVhZGVyICs9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50cmlnZ2VyX3Rl bXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ2RlbGV0ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25uKQotCi0gICAgICAgICAgICAjIElm IHRoZSByZXF1ZXN0IGZvciBuZXcgb2JqZWN0IHdoaWNoIGRvIG5vdCBoYXZlIGRpZAotICAgICAg ICAgICAgdHJpZ2dlcl9zcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudHJpZ2dl cl90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdjcmVhdGUuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBjb25uPXNlbGYuY29ubikKLQotICAgICAgICAgICAg dHJpZ2dlcl9zcWwgPSBzcWxfaGVhZGVyICsgJ1xuXG4nICsgdHJpZ2dlcl9zcWwuc3RyaXAoJ1xu JykKLQotICAgICAgICAgICAgIyBJZiB0cmlnZ2VyIGlzIGRpc2FibGVkIHRoZW4gYWRkIHNxbCBj b2RlIGZvciB0aGUgc2FtZQotICAgICAgICAgICAgaWYgbm90IGRhdGFbJ2lzX2VuYWJsZV90cmln Z2VyJ106Ci0gICAgICAgICAgICAgICAgdHJpZ2dlcl9zcWwgKz0gJ1xuXG4nCi0gICAgICAgICAg ICAgICAgdHJpZ2dlcl9zcWwgKz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFsKLSAgICAgICAg ICAgICAgICAgICAgc2VsZi50cmlnZ2VyX3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAg ICAgICdlbmFibGVfZGlzYWJsZV90cmlnZ2VyLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAg ZGF0YT1kYXRhLCBjb25uPXNlbGYuY29ubikKLQotICAgICAgICAgICAgIyBBZGQgaW50byBtYWlu IHNxbAotICAgICAgICAgICAgdHJpZ2dlcl9zcWwgPSByZS5zdWIoJ1xuezIsfScsICdcblxuJywg dHJpZ2dlcl9zcWwpCi0gICAgICAgICAgICBtYWluX3NxbC5hcHBlbmQodHJpZ2dlcl9zcWwpCi0K LSAgICAgICAgIiIiCi0gICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKLSAgICAgICAgIyA0KSBSZXZlcnNlIGVuZ2luZWVyZWQgc3FsIGZvciBSVUxFUwotICAgICAg ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICIiIgotCi0g ICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKLSAgICAgICAgICAgIFtzZWxm LnJ1bGVzX3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwgdGlkPXRpZCkKLQotICAg ICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKLSAgICAg ICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJy b3IoZXJyb3Jtc2c9cnNldCkKLQotICAgICAgICBmb3Igcm93IGluIHJzZXRbJ3Jvd3MnXToKLSAg ICAgICAgICAgIHJ1bGVzX3NxbCA9ICdcbicKLSAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1w bGF0ZSgiLyIuam9pbigKLSAgICAgICAgICAgICAgICBbc2VsZi5ydWxlc190ZW1wbGF0ZV9wYXRo LCAncHJvcGVydGllcy5zcWwnXQotICAgICAgICAgICAgKSwgcmlkPXJvd1snb2lkJ10sIGRhdGxh c3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkKQotCi0gICAgICAgICAgICBzdGF0dXMsIHJlcyA9 IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQotICAgICAgICAgICAgaWYgbm90IHN0YXR1czoK LSAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJl cykKLQotICAgICAgICAgICAgcmVzX2RhdGEgPSBwYXJzZV9ydWxlX2RlZmluaXRpb24ocmVzKQot ICAgICAgICAgICAgcnVsZXNfc3FsICs9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKLSAgICAg ICAgICAgICAgICBbc2VsZi5ydWxlc190ZW1wbGF0ZV9wYXRoLCAnY3JlYXRlLnNxbCddKSwKLSAg ICAgICAgICAgICAgICBkYXRhPXJlc19kYXRhLCBkaXNwbGF5X2NvbW1lbnRzPVRydWUpCi0KLSAg ICAgICAgICAgICMgQWRkIGludG8gbWFpbiBzcWwKLSAgICAgICAgICAgIHJ1bGVzX3NxbCA9IHJl LnN1YignXG57Mix9JywgJ1xuXG4nLCBydWxlc19zcWwpCi0gICAgICAgICAgICBtYWluX3NxbC5h cHBlbmQocnVsZXNfc3FsKQotCi0gICAgICAgIHNxbCA9ICdcbicuam9pbihtYWluX3NxbCkKLQot ICAgICAgICByZXR1cm4gYWpheF9yZXNwb25zZShyZXNwb25zZT1zcWwuc3RyaXAoJ1xuJykpCi0K LSAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29u ZGl0aW9uCiAgICAgZGVmIHNlbGVjdF9zcWwoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlk KToKICAgICAgICAgIiIiCiAgICAgICAgIFNFTEVDVCBzY3JpcHQgc3FsIGZvciB0aGUgb2JqZWN0 CkBAIC0yODEwLDEwICsxMjYzLDExIEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcs IERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIFJldHVybnM6CiAgICAg ICAgICAgICBTRUxFQ1QgU2NyaXB0IHNxbCBmb3IgdGhlIG9iamVjdAogICAgICAgICAiIiIKLSAg ICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3Fs J10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0 aWQ9dGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxm LmRhdGxhc3RzeXNvaWQpCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAg ICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCdd KSwKKyAgICAgICAgICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKKyAgICAgICAgICAg IGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkCisgICAgICAgICkKICAgICAgICAgc3Rh dHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKICAgICAgICAgaWYgbm90IHN0 YXR1czoKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9 cmVzKQpAQCAtMjgzOSw3ICsxMjkzLDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmll dywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgKQogICAgICAgICBy ZXR1cm4gYWpheF9yZXNwb25zZShyZXNwb25zZT1zcWwpCiAKLSAgICBAY2hlY2tfcHJlY29uZGl0 aW9uCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIGluc2Vy dF9zcWwoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkKToKICAgICAgICAgIiIiCiAgICAg ICAgIElOU0VSVCBzY3JpcHQgc3FsIGZvciB0aGUgb2JqZWN0CkBAIC0yODU0LDEwICsxMzA4LDEx IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1 dW1TZXR0aW5ncyk6CiAgICAgICAgIFJldHVybnM6CiAgICAgICAgICAgICBJTlNFUlQgU2NyaXB0 IHNxbCBmb3IgdGhlIG9iamVjdAogICAgICAgICAiIiIKLSAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0aWQ9dGlkLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCisgICAg ICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRh YmxlX3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgIGRpZD1k aWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKKyAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5k YXRsYXN0c3lzb2lkCisgICAgICAgICkKICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4u ZXhlY3V0ZV9kaWN0KFNRTCkKICAgICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgIHJl dHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQpAQCAtMjg4Niw3ICsxMzQx LDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZh Y3V1bVNldHRpbmdzKToKIAogICAgICAgICByZXR1cm4gYWpheF9yZXNwb25zZShyZXNwb25zZT1z cWwpCiAKLSAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tf cHJlY29uZGl0aW9uCiAgICAgZGVmIHVwZGF0ZV9zcWwoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2Np ZCwgdGlkKToKICAgICAgICAgIiIiCiAgICAgICAgIFVQREFURSBzY3JpcHQgc3FsIGZvciB0aGUg b2JqZWN0CkBAIC0yOTAxLDEwICsxMzU2LDExIEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9k ZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIFJldHVybnM6 CiAgICAgICAgICAgICBVUERBVEUgU2NyaXB0IHNxbCBmb3IgdGhlIG9iamVjdAogICAgICAgICAi IiIKLSAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRl X3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRp ZXMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRpZCwgc2NpZD1z Y2lkLCB0aWQ9dGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0bGFzdHN5c29p ZD1zZWxmLmRhdGxhc3RzeXNvaWQpCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAg ICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVz LnNxbCddKSwKKyAgICAgICAgICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKKyAgICAg ICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkCisgICAgICAgICkKICAgICAg ICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKICAgICAgICAgaWYg bm90IHN0YXR1czoKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJy b3Jtc2c9cmVzKQpAQCAtMjkzNSw3ICsxMzkxLDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGRO b2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKIAogICAgICAgICByZXR1 cm4gYWpheF9yZXNwb25zZShyZXNwb25zZT1zcWwpCiAKLSAgICBAY2hlY2tfcHJlY29uZGl0aW9u CisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIGRlbGV0ZV9z cWwoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkKToKICAgICAgICAgIiIiCiAgICAgICAg IERFTEVURSBzY3JpcHQgc3FsIGZvciB0aGUgb2JqZWN0CkBAIC0yOTUwLDEwICsxNDA2LDExIEBA IGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1T ZXR0aW5ncyk6CiAgICAgICAgIFJldHVybnM6CiAgICAgICAgICAgICBERUxFVEUgU2NyaXB0IHNx bCBmb3IgdGhlIG9iamVjdAogICAgICAgICAiIiIKLSAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBs YXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0aWQ9dGlkLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCisgICAgICAg IFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxl X3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgIGRpZD1kaWQs IHNjaWQ9c2NpZCwgdGlkPXRpZCwKKyAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRs YXN0c3lzb2lkCisgICAgICAgICkKICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhl Y3V0ZV9kaWN0KFNRTCkKICAgICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgIHJldHVy biBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQpAQCAtMjk2Niw3ICsxNDIzLDcg QEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1 bVNldHRpbmdzKToKIAogICAgICAgICByZXR1cm4gYWpheF9yZXNwb25zZShyZXNwb25zZT1zcWwp CiAKLSAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJl Y29uZGl0aW9uCiAgICAgZGVmIHN0YXRpc3RpY3Moc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwg dGlkPU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAgU3RhdGlzdGljcwpAQCAtMjk4Miw2MyAr MTQzOSw2IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVy LCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiBzdGF0 aXN0aWNzIGZvciBhbGwgdGhlIHRhYmxlcyBpbiB0aGF0CiAgICAgICAgIHNjaGVtYS4KICAgICAg ICAgIiIiCi0KLSAgICAgICAgIyBGZXRjaCBzY2hlbWEgbmFtZQotICAgICAgICBzdGF0dXMsIHNj aGVtYV9uYW1lID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKAotICAgICAgICAgICAgcmVuZGVy X3RlbXBsYXRlKAotICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgs ICdnZXRfc2NoZW1hLnNxbCddKSwKLSAgICAgICAgICAgICAgICBjb25uPXNlbGYuY29ubiwgc2Np ZD1zY2lkCi0gICAgICAgICAgICApCi0gICAgICAgICkKLSAgICAgICAgaWYgbm90IHN0YXR1czoK LSAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c2NoZW1h X25hbWUpCi0KLSAgICAgICAgaWYgdGlkIGlzIE5vbmU6Ci0gICAgICAgICAgICBzdGF0dXMsIHJl cyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoCi0gICAgICAgICAgICAgICAgcmVuZGVyX3RlbXBs YXRlKAotICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAn Y29sbF90YWJsZV9zdGF0cy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgIGNvbm49c2VsZi5j b25uLCBzY2hlbWFfbmFtZT1zY2hlbWFfbmFtZQotICAgICAgICAgICAgICAgICkKLSAgICAgICAg ICAgICkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgRm9yIEluZGl2aWR1YWwgdGFibGUg c3RhdHMKLQotICAgICAgICAgICAgIyBDaGVjayBpZiBwZ3N0YXR0dXBsZSBleHRlbnNpb24gaXMg YWxyZWFkeSBjcmVhdGVkPwotICAgICAgICAgICAgIyBpZiBjcmVhdGVkIHRoZW4gb25seSBhZGQg ZXh0ZW5kZWQgc3RhdHMKLSAgICAgICAgICAgIHN0YXR1cywgaXNfcGdzdGF0dHVwbGUgPSBzZWxm LmNvbm4uZXhlY3V0ZV9zY2FsYXIoIiIiCi0gICAgICAgICAgICBTRUxFQ1QgKGNvdW50KGV4dG5h bWUpID4gMCkgQVMgaXNfcGdzdGF0dHVwbGUKLSAgICAgICAgICAgIEZST00gcGdfZXh0ZW5zaW9u Ci0gICAgICAgICAgICBXSEVSRSBleHRuYW1lPSdwZ3N0YXR0dXBsZScKLSAgICAgICAgICAgICIi IikKLSAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlu dGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1pc19wZ3N0YXR0dXBsZSkKLQotICAgICAgICAg ICAgIyBGZXRjaCBUYWJsZSBuYW1lCi0gICAgICAgICAgICBzdGF0dXMsIHRhYmxlX25hbWUgPSBz ZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoCi0gICAgICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRl KAotICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAnZ2V0 X3RhYmxlLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgY29ubj1zZWxmLmNvbm4sIHNjaWQ9 c2NpZCwgdGlkPXRpZAotICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICkKLSAgICAgICAg ICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz10YWJsZV9uYW1lKQotCi0gICAgICAgICAgICBzdGF0dXMsIHJlcyA9 IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoCi0gICAgICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRl KAotICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAnc3Rh dHMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICBjb25uPXNlbGYuY29ubiwgc2NoZW1hX25h bWU9c2NoZW1hX25hbWUsCi0gICAgICAgICAgICAgICAgICAgIHRhYmxlX25hbWU9dGFibGVfbmFt ZSwKLSAgICAgICAgICAgICAgICAgICAgaXNfcGdzdGF0dHVwbGU9aXNfcGdzdGF0dHVwbGUsIHRp ZD10aWQKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICApCi0KLSAgICAgICAgaWYgbm90 IHN0YXR1czoKLSAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jt c2c9cmVzKQotCi0gICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCi0gICAgICAgICAg ICBkYXRhPXJlcywKLSAgICAgICAgICAgIHN0YXR1cz0yMDAKLSAgICAgICAgKQotCisgICAgICAg IHJldHVybiBCYXNlVGFibGVWaWV3LmdldF90YWJsZV9zdGF0aXN0aWNzKHNlbGYsIHNjaWQsIHRp ZCkKIAogVGFibGVWaWV3LnJlZ2lzdGVyX25vZGVfdmlldyhibHVlcHJpbnQpCmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2No ZW1hcy90YWJsZXMvY29sdW1uL3RlbXBsYXRlcy9jb2x1bW4vanMvY29sdW1uLmpzIGIvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFi bGVzL2NvbHVtbi90ZW1wbGF0ZXMvY29sdW1uL2pzL2NvbHVtbi5qcwppbmRleCAxNzliOTYxLi4x MDczN2UwIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29sdW1uL3RlbXBsYXRlcy9jb2x1bW4vanMv Y29sdW1uLmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb2x1bW4vdGVtcGxhdGVzL2NvbHVtbi9qcy9jb2x1 bW4uanMKQEAgLTg2LDYgKzg2LDcgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUuY29sdW1uJywgWwog CiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydjb2x1bW4nXSkgewogICAgIHBnQnJvd3Nlci5Ob2Rl c1snY29sdW1uJ10gPSBwZ0Jyb3dzZXIuTm9kZS5leHRlbmQoeworICAgICAgZ2V0VHJlZU5vZGVI aWVyYXJjaHk6IHBnQnJvd3Nlci50YWJsZUNoaWxkVHJlZU5vZGVIaWVyYXJjaHksCiAgICAgICBw YXJlbnRfdHlwZTogWyd0YWJsZScsICd2aWV3JywgJ212aWV3J10sCiAgICAgICBjb2xsZWN0aW9u X3R5cGU6IFsnY29sbC10YWJsZScsICdjb2xsLXZpZXcnLCAnY29sbC1tdmlldyddLAogICAgICAg dHlwZTogJ2NvbHVtbicsCkBAIC0xOTcsMTEgKzE5OCwxNyBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9k ZS5jb2x1bW4nLCBbCiAgICAgICAgICAgICApOwogICAgICAgICAgIH0sCiAgICAgICAgICAgZGlz YWJsZWQ6IGZ1bmN0aW9uKG0pewotICAgICAgICAgICAgLy8gSWYgcHJpbWFyeSBrZXkgYWxyZWFk eSBleGlzdCB0aGVuIGRpc2FibGUuCisgICAgICAgICAgICAvLyBEaXNhYmxlIGl0LCB3aGVuIG9u ZSBvZiB0aGlzOgorICAgICAgICAgICAgLy8gLSBQcmltYXJ5IGtleSBhbHJlYWR5IGV4aXN0Cisg ICAgICAgICAgICAvLyAtIFRhYmxlIGlzIGEgcGFydGl0aW9uZWQgdGFibGUKICAgICAgICAgICAg IGlmICgKLSAgICAgICAgICAgICAgbS50b3AgJiYgIV8uaXNVbmRlZmluZWQobS50b3AuZ2V0KCdv aWQnKSkgJiYKLSAgICAgICAgICAgICAgICBtLnRvcC5nZXQoJ3ByaW1hcnlfa2V5JykubGVuZ3Ro ID4gMCAmJgotICAgICAgICAgICAgICAgICFfLmlzVW5kZWZpbmVkKG0udG9wLmdldCgncHJpbWFy eV9rZXknKS5maXJzdCgpLmdldCgnb2lkJykpCisgICAgICAgICAgICAgIG0udG9wICYmICgoCisg ICAgICAgICAgICAgICAgIV8uaXNVbmRlZmluZWQobS50b3AuZ2V0KCdvaWQnKSkgJiYKKyAgICAg ICAgICAgICAgICAgIG0udG9wLmdldCgncHJpbWFyeV9rZXknKS5sZW5ndGggPiAwICYmCisgICAg ICAgICAgICAgICAgICAhXy5pc1VuZGVmaW5lZChtLnRvcC5nZXQoJ3ByaW1hcnlfa2V5JykuZmly c3QoKS5nZXQoJ29pZCcpKQorICAgICAgICAgICAgICApIHx8ICgKKyAgICAgICAgICAgICAgICBt LnRvcC5oYXMoJ2lzX3BhcnRpdGlvbmVkJykgJiYgbS50b3AuZ2V0KCdpc19wYXJ0aXRpb25lZCcp CisgICAgICAgICAgICAgICkpCiAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgcmV0dXJu IHRydWU7CiAgICAgICAgICAgICB9CkBAIC0yMjgsNiArMjM1LDE3IEBAIGRlZmluZSgncGdhZG1p bi5ub2RlLmNvbHVtbicsIFsKICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg ICAgfQogCisgICAgICAgICAgICAvLyBJZiB0YWJsZSBpcyBwYXJ0aXRpb25lZCB0YWJsZSB0aGVu IGRpc2FibGUKKyAgICAgICAgICAgIGlmIChtLnRvcCAmJiAhXy5pc1VuZGVmaW5lZChtLnRvcC5n ZXQoJ2lzX3BhcnRpdGlvbmVkJykpICYmCisgICAgICAgICAgICAgIG0udG9wLmdldCgnaXNfcGFy dGl0aW9uZWQnKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5j dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgbS5zZXQoJ2lzX3ByaW1hcnlfa2V5JywgZmFsc2Up OworICAgICAgICAgICAgICB9LCAxMCk7CisKKyAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZighbS5pblNjaGVtYVdpdGhDb2x1bW5DaGVj ay5hcHBseSh0aGlzLCBbbV0pICYmCiAgICAgICAgICAgICAgICFfLmlzVW5kZWZpbmVkKG5hbWUp ICYmICFfLmlzTnVsbChuYW1lKSAmJiBuYW1lICE9PSAnJykgewogICAgICAgICAgICAgICByZXR1 cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9z ZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb2x1bW4vdGVzdHMvdGVzdF9jb2x1bW5f Z2V0LnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJh c2VzL3NjaGVtYXMvdGFibGVzL2NvbHVtbi90ZXN0cy90ZXN0X2NvbHVtbl9nZXQucHkKaW5kZXgg NzEzZDk5OS4uNGFkZmJlZiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbHVtbi90ZXN0cy90ZXN0 X2NvbHVtbl9nZXQucHkKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbHVtbi90ZXN0cy90ZXN0X2NvbHVtbl9n ZXQucHkKQEAgLTI0LDcgKzI0LDcgQEAgZnJvbSAuIGltcG9ydCB1dGlscyBhcyBjb2x1bW5zX3V0 aWxzCiBjbGFzcyBDb2x1bW5HZXRUZXN0Q2FzZShCYXNlVGVzdEdlbmVyYXRvcik6CiAgICAgIiIi VGhpcyBjbGFzcyB3aWxsIGdldCBjb2x1bW4gdW5kZXIgdGFibGUgbm9kZS4iIiIKICAgICBzY2Vu YXJpb3MgPSBbCi0gICAgICAgICgnRmV0Y2ggdGFibGUgTm9kZSBVUkwnLCBkaWN0KHVybD0nL2Jy b3dzZXIvY29sdW1uL29iai8nKSkKKyAgICAgICAgKCdGZXRjaCBjb2x1bW5zIHVuZGVyIHRhYmxl IG5vZGUnLCBkaWN0KHVybD0nL2Jyb3dzZXIvY29sdW1uL29iai8nKSkKICAgICBdCiAKICAgICBk ZWYgc2V0VXAoc2VsZik6CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvY2hlY2tf Y29uc3RyYWludC90ZW1wbGF0ZXMvY2hlY2tfY29uc3RyYWludC9qcy9jaGVja19jb25zdHJhaW50 LmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2Vz L3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2NoZWNrX2NvbnN0cmFpbnQvdGVtcGxhdGVzL2No ZWNrX2NvbnN0cmFpbnQvanMvY2hlY2tfY29uc3RyYWludC5qcwppbmRleCBiMTJkOWQzLi44NWY2 MmY3IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVy cy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvY2hlY2tfY29uc3RyYWludC90 ZW1wbGF0ZXMvY2hlY2tfY29uc3RyYWludC9qcy9jaGVja19jb25zdHJhaW50LmpzCisrKyBiL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L3RhYmxlcy9jb25zdHJhaW50cy9jaGVja19jb25zdHJhaW50L3RlbXBsYXRlcy9jaGVja19jb25z dHJhaW50L2pzL2NoZWNrX2NvbnN0cmFpbnQuanMKQEAgLTEwLDYgKzEwLDcgQEAgZGVmaW5lKCdw Z2FkbWluLm5vZGUuY2hlY2tfY29uc3RyYWludHMnLCBbCiAgIC8vIENoZWNrIENvbnN0cmFpbnQg Tm9kZQogICBpZiAoIXBnQnJvd3Nlci5Ob2Rlc1snY2hlY2tfY29uc3RyYWludHMnXSkgewogICAg IHBnQWRtaW4uQnJvd3Nlci5Ob2Rlc1snY2hlY2tfY29uc3RyYWludHMnXSA9IHBnQnJvd3Nlci5O b2RlLmV4dGVuZCh7CisgICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdCcm93c2VyLnRhYmxl Q2hpbGRUcmVlTm9kZUhpZXJhcmNoeSwKICAgICAgIHR5cGU6ICdjaGVja19jb25zdHJhaW50cycs CiAgICAgICBsYWJlbDogZ2V0dGV4dCgnQ2hlY2snKSwKICAgICAgIGNvbGxlY3Rpb25fdHlwZTog J2NvbGwtY29uc3RyYWludHMnLApAQCAtMTgsNyArMTksNyBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9k ZS5jaGVja19jb25zdHJhaW50cycsIFsKICAgICAgIGRpYWxvZ0hlbHA6IHVybF9mb3IoJ2hlbHAu c3RhdGljJywgeydmaWxlbmFtZSc6ICdjaGVja19kaWFsb2cuaHRtbCd9KSwKICAgICAgIGhhc1NR TDogdHJ1ZSwKICAgICAgIGhhc0RlcGVuZHM6IHRydWUsCi0gICAgICBwYXJlbnRfdHlwZTogWyd0 YWJsZSddLAorICAgICAgcGFyZW50X3R5cGU6IFsndGFibGUnLCdwYXJ0aXRpb24nXSwKICAgICAg IEluaXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAvLyBBdm9pZCBtdWxpdHBsZSByZWdpc3RyYXRp b24gb2YgbWVudXMKICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpCkBAIC0xMzcsNiArMTM4 LDE4IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmNoZWNrX2NvbnN0cmFpbnRzJywgWwogICAgICAg ICAgICdzd2l0Y2gnLCBjZWxsOiAnYm9vbGVhbicsIGdyb3VwOiBnZXR0ZXh0KCdEZWZpbml0aW9u JyksIG1vZGU6CiAgICAgICAgICAgWydwcm9wZXJ0aWVzJywgJ2NyZWF0ZScsICdlZGl0J10sIG1p bl92ZXJzaW9uOiA5MDIwMCwKICAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24obSkgeworICAg ICAgICAgICAgLy8gRGlzYWJsZWQgaWYgdGFibGUgaXMgYSBwYXJ0aXRpb25lZCB0YWJsZS4KKyAg ICAgICAgICAgIGlmICgoXy5oYXMobSAsICd0b3AnKSAmJiAhXy5pc1VuZGVmaW5lZChtLnRvcCkg JiYgbS50b3AuZ2V0KCdpc19wYXJ0aXRpb25lZCcpKSB8fAorICAgICAgICAgICAgICAgIChfLmhh cyhtLCAnbm9kZV9pbmZvJykgJiYgXy5oYXMobS5ub2RlX2luZm8sICd0YWJsZScpICYmCisgICAg ICAgICAgICAgICAgXy5oYXMobS5ub2RlX2luZm8udGFibGUsICdpc19wYXJ0aXRpb25lZCcpICYm IG0ubm9kZV9pbmZvLnRhYmxlLmlzX3BhcnRpdGlvbmVkKQorICAgICAgICAgICAgKXsKKyAgICAg ICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgbS5zZXQo J2Nvbm5vaW5oZXJpdCcsIGZhbHNlKTsKKyAgICAgICAgICAgICAgfSwxMCk7CisKKyAgICAgICAg ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHJldHVybiAo KF8uaGFzKG0sICdoYW5kbGVyJykgJiYKICAgICAgICAgICAgICAgIV8uaXNVbmRlZmluZWQobS5o YW5kbGVyKSAmJgogICAgICAgICAgICAgICAhXy5pc1VuZGVmaW5lZChtLmdldCgnb2lkJykpKSB8 fCAoXy5pc0Z1bmN0aW9uKG0uaXNOZXcpICYmICFtLmlzTmV3KCkpKTsKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L3RhYmxlcy9jb25zdHJhaW50cy9leGNsdXNpb25fY29uc3RyYWludC90ZW1wbGF0ZXMvZXhjbHVz aW9uX2NvbnN0cmFpbnQvanMvZXhjbHVzaW9uX2NvbnN0cmFpbnQuanMgYi93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29u c3RyYWludHMvZXhjbHVzaW9uX2NvbnN0cmFpbnQvdGVtcGxhdGVzL2V4Y2x1c2lvbl9jb25zdHJh aW50L2pzL2V4Y2x1c2lvbl9jb25zdHJhaW50LmpzCmluZGV4IDgxNGVkY2UuLjYwNTQ5NWQgMTAw NjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9leGNsdXNpb25fY29uc3RyYWludC90ZW1w bGF0ZXMvZXhjbHVzaW9uX2NvbnN0cmFpbnQvanMvZXhjbHVzaW9uX2NvbnN0cmFpbnQuanMKKysr IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2V4Y2x1c2lvbl9jb25zdHJhaW50L3RlbXBsYXRlcy9l eGNsdXNpb25fY29uc3RyYWludC9qcy9leGNsdXNpb25fY29uc3RyYWludC5qcwpAQCAtNjAyLDYg KzYwMiw3IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmV4Y2x1c2lvbl9jb25zdHJhaW50JywgWwog ICAvLyBFeHRlbmQgdGhlIGJyb3dzZXIncyBub2RlIGNsYXNzIGZvciBleGNsdXNpb24gY29uc3Ry YWludCBub2RlCiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydleGNsdXNpb25fY29uc3RyYWludCdd KSB7CiAgICAgcGdBZG1pbi5Ccm93c2VyLk5vZGVzWydleGNsdXNpb25fY29uc3RyYWludCddID0g cGdCcm93c2VyLk5vZGUuZXh0ZW5kKHsKKyAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jy b3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgdHlwZTogJ2V4Y2x1c2lv bl9jb25zdHJhaW50JywKICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdFeGNsdXNpb24gY29uc3RyYWlu dCcpLAogICAgICAgY29sbGVjdGlvbl90eXBlOiAnY29sbC1jb25zdHJhaW50cycsCkBAIC02MDks NyArNjEwLDcgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUuZXhjbHVzaW9uX2NvbnN0cmFpbnQnLCBb CiAgICAgICBzcWxDcmVhdGVIZWxwOiAnZGRsLWNvbnN0cmFpbnRzLmh0bWwnLAogICAgICAgZGlh bG9nSGVscDogdXJsX2ZvcignaGVscC5zdGF0aWMnLCB7J2ZpbGVuYW1lJzogJ2V4Y2x1c2lvbl9j b25zdHJhaW50X2RpYWxvZy5odG1sJ30pLAogICAgICAgaGFzU1FMOiB0cnVlLAotICAgICAgcGFy ZW50X3R5cGU6ICd0YWJsZScsCisgICAgICBwYXJlbnRfdHlwZTogWyd0YWJsZScsJ3BhcnRpdGlv biddLAogICAgICAgY2FuRHJvcDogdHJ1ZSwKICAgICAgIGNhbkRyb3BDYXNjYWRlOiB0cnVlLAog ICAgICAgaGFzRGVwZW5kczogdHJ1ZSwKQEAgLTkxNiwxMiArOTE3LDIyIEBAIGRlZmluZSgncGdh ZG1pbi5ub2RlLmV4Y2x1c2lvbl9jb25zdHJhaW50JywgWwogICAgICAgICAgIGlmIChkYXRhICYm IGRhdGEuY2hlY2sgPT0gZmFsc2UpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAg ICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsIGkgPSBpdGVtLCBkID0gaXRlbURhdGEsIHBhcmVu dHMgPSBbXTsKKyAgICAgICAgICB2YXIgdCA9IHBnQnJvd3Nlci50cmVlLCBpID0gaXRlbSwgZCA9 IGl0ZW1EYXRhLCBwYXJlbnRzID0gW10sCisgICAgICAgICAgICBpbW1lZGlhdGVfcGFyZW50X3Rh YmxlX2ZvdW5kID0gZmFsc2UsCisgICAgICAgICAgICBpc19pbW1lZGlhdGVfcGFyZW50X3RhYmxl X3BhcnRpdGlvbmVkID0gZmFsc2U7CiAgICAgICAgICAgLy8gVG8gaXRlcmF0ZSBvdmVyIHRyZWUg dG8gY2hlY2sgcGFyZW50IG5vZGUKICAgICAgICAgICB3aGlsZSAoaSkgeworICAgICAgICAgICAg Ly8gSWYgdGFibGUgaXMgcGFydGl0aW9uZWQgdGFibGUgdGhlbiByZXR1cm4gZmFsc2UKKyAgICAg ICAgICAgIGlmICghaW1tZWRpYXRlX3BhcmVudF90YWJsZV9mb3VuZCAmJiAoZC5fdHlwZSA9PSAn dGFibGUnIHx8IGQuX3R5cGUgPT0gJ3BhcnRpdGlvbicpKSB7CisgICAgICAgICAgICAgIGltbWVk aWF0ZV9wYXJlbnRfdGFibGVfZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICBpZiAoJ2lzX3Bh cnRpdGlvbmVkJyBpbiBkICYmIGQuaXNfcGFydGl0aW9uZWQpIHsKKyAgICAgICAgICAgICAgICBp c19pbW1lZGlhdGVfcGFyZW50X3RhYmxlX3BhcnRpdGlvbmVkID0gdHJ1ZTsKKyAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBJZiBpdCBpcyBzY2hlbWEgdGhl biBhbGxvdyB1c2VyIHRvIGNyZWF0ZSB0YWJsZQogICAgICAgICAgICAgaWYgKF8uaW5kZXhPZihb J3NjaGVtYSddLCBkLl90eXBlKSA+IC0xKQotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg ICAgICAgICAgICAgcmV0dXJuICFpc19pbW1lZGlhdGVfcGFyZW50X3RhYmxlX3BhcnRpdGlvbmVk OwogICAgICAgICAgICAgcGFyZW50cy5wdXNoKGQuX3R5cGUpOwogICAgICAgICAgICAgaSA9IHQu aGFzUGFyZW50KGkpID8gdC5wYXJlbnQoaSkgOiBudWxsOwogICAgICAgICAgICAgZCA9IGkgPyB0 Lml0ZW1EYXRhKGkpIDogbnVsbDsKQEAgLTkzMCw3ICs5NDEsNyBAQCBkZWZpbmUoJ3BnYWRtaW4u bm9kZS5leGNsdXNpb25fY29uc3RyYWludCcsIFsKICAgICAgICAgICBpZiAoXy5pbmRleE9mKHBh cmVudHMsICdjYXRhbG9nJykgPiAtMSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJl dHVybiAhaXNfaW1tZWRpYXRlX3BhcmVudF90YWJsZV9wYXJ0aXRpb25lZDsKICAgICAgICAgICB9 CiAgICAgICB9CiAgICAgfSk7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvZm9y ZWlnbl9rZXkvdGVtcGxhdGVzL2ZvcmVpZ25fa2V5L2pzL2ZvcmVpZ25fa2V5LmpzIGIvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFi bGVzL2NvbnN0cmFpbnRzL2ZvcmVpZ25fa2V5L3RlbXBsYXRlcy9mb3JlaWduX2tleS9qcy9mb3Jl aWduX2tleS5qcwppbmRleCA5NWFmYTNlLi5hNGJlYzA5IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1p bi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMv Y29uc3RyYWludHMvZm9yZWlnbl9rZXkvdGVtcGxhdGVzL2ZvcmVpZ25fa2V5L2pzL2ZvcmVpZ25f a2V5LmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9mb3JlaWduX2tleS90ZW1wbGF0ZXMv Zm9yZWlnbl9rZXkvanMvZm9yZWlnbl9rZXkuanMKQEAgLTYwMiw2ICs2MDIsNyBAQCBkZWZpbmUo J3BnYWRtaW4ubm9kZS5mb3JlaWduX2tleScsIFsKICAgLy8gRXh0ZW5kIHRoZSBicm93c2VyJ3Mg bm9kZSBjbGFzcyBmb3IgZm9yZWlnbiBrZXkgbm9kZQogICBpZiAoIXBnQnJvd3Nlci5Ob2Rlc1sn Zm9yZWlnbl9rZXknXSkgewogICAgIHBnQWRtaW4uQnJvd3Nlci5Ob2Rlc1snZm9yZWlnbl9rZXkn XSA9IHBnQnJvd3Nlci5Ob2RlLmV4dGVuZCh7CisgICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTog cGdCcm93c2VyLnRhYmxlQ2hpbGRUcmVlTm9kZUhpZXJhcmNoeSwKICAgICAgIHR5cGU6ICdmb3Jl aWduX2tleScsCiAgICAgICBsYWJlbDogZ2V0dGV4dCgnRm9yZWlnbiBrZXknKSwKICAgICAgIGNv bGxlY3Rpb25fdHlwZTogJ2NvbGwtY29uc3RyYWludHMnLApAQCAtNjEwLDcgKzYxMSw3IEBAIGRl ZmluZSgncGdhZG1pbi5ub2RlLmZvcmVpZ25fa2V5JywgWwogICAgICAgZGlhbG9nSGVscDogdXJs X2ZvcignaGVscC5zdGF0aWMnLCB7J2ZpbGVuYW1lJzogJ2ZvcmVpZ25fa2V5X2RpYWxvZy5odG1s J30pLAogICAgICAgaGFzU1FMOiB0cnVlLAogICAgICAgaGFzRGVwZW5kczogZmFsc2UsCi0gICAg ICBwYXJlbnRfdHlwZTogJ3RhYmxlJywKKyAgICAgIHBhcmVudF90eXBlOiBbJ3RhYmxlJywncGFy dGl0aW9uJ10sCiAgICAgICBjYW5Ecm9wOiB0cnVlLAogICAgICAgY2FuRHJvcENhc2NhZGU6IHRy dWUsCiAgICAgICBoYXNEZXBlbmRzOiB0cnVlLApAQCAtMTA2OCwxMiArMTA2OSwyMiBAQCBkZWZp bmUoJ3BnYWRtaW4ubm9kZS5mb3JlaWduX2tleScsIFsKICAgICAgICAgICBpZiAoZGF0YSAmJiBk YXRhLmNoZWNrID09IGZhbHNlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAg ICB2YXIgdCA9IHBnQnJvd3Nlci50cmVlLCBpID0gaXRlbSwgZCA9IGl0ZW1EYXRhLCBwYXJlbnRz ID0gW107CisgICAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwgaSA9IGl0ZW0sIGQgPSBp dGVtRGF0YSwgcGFyZW50cyA9IFtdLAorICAgICAgICAgICAgaW1tZWRpYXRlX3BhcmVudF90YWJs ZV9mb3VuZCA9IGZhbHNlLAorICAgICAgICAgICAgaXNfaW1tZWRpYXRlX3BhcmVudF90YWJsZV9w YXJ0aXRpb25lZCA9IGZhbHNlOwogICAgICAgICAgIC8vIFRvIGl0ZXJhdGUgb3ZlciB0cmVlIHRv IGNoZWNrIHBhcmVudCBub2RlCiAgICAgICAgICAgd2hpbGUgKGkpIHsKKyAgICAgICAgICAgIC8v IElmIHRhYmxlIGlzIHBhcnRpdGlvbmVkIHRhYmxlIHRoZW4gcmV0dXJuIGZhbHNlCisgICAgICAg ICAgICBpZiAoIWltbWVkaWF0ZV9wYXJlbnRfdGFibGVfZm91bmQgJiYgKGQuX3R5cGUgPT0gJ3Rh YmxlJyB8fCBkLl90eXBlID09ICdwYXJ0aXRpb24nKSkgeworICAgICAgICAgICAgICBpbW1lZGlh dGVfcGFyZW50X3RhYmxlX2ZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgaWYgKCdpc19wYXJ0 aXRpb25lZCcgaW4gZCAmJiBkLmlzX3BhcnRpdGlvbmVkKSB7CisgICAgICAgICAgICAgICAgaXNf aW1tZWRpYXRlX3BhcmVudF90YWJsZV9wYXJ0aXRpb25lZCA9IHRydWU7CisgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gSWYgaXQgaXMgc2NoZW1hIHRoZW4g YWxsb3cgdXNlciB0byBjIHJlYXRlIHRhYmxlCiAgICAgICAgICAgICBpZiAoXy5pbmRleE9mKFsn c2NoZW1hJ10sIGQuX3R5cGUpID4gLTEpCi0gICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg ICAgICAgICAgICByZXR1cm4gIWlzX2ltbWVkaWF0ZV9wYXJlbnRfdGFibGVfcGFydGl0aW9uZWQ7 CiAgICAgICAgICAgICBwYXJlbnRzLnB1c2goZC5fdHlwZSk7CiAgICAgICAgICAgICBpID0gdC5o YXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGw7CiAgICAgICAgICAgICBkID0gaSA/IHQu aXRlbURhdGEoaSkgOiBudWxsOwpAQCAtMTA4Miw3ICsxMDkzLDcgQEAgZGVmaW5lKCdwZ2FkbWlu Lm5vZGUuZm9yZWlnbl9rZXknLCBbCiAgICAgICAgICAgaWYgKF8uaW5kZXhPZihwYXJlbnRzLCAn Y2F0YWxvZycpID4gLTEpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gIWlz X2ltbWVkaWF0ZV9wYXJlbnRfdGFibGVfcGFydGl0aW9uZWQ7CiAgICAgICAgICAgfQogICAgICAg fQogICAgIH0pOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2luZGV4X2NvbnN0 cmFpbnQvdGVtcGxhdGVzL2luZGV4X2NvbnN0cmFpbnQvanMvaW5kZXhfY29uc3RyYWludC5qcyBi L3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hl bWFzL3RhYmxlcy9jb25zdHJhaW50cy9pbmRleF9jb25zdHJhaW50L3RlbXBsYXRlcy9pbmRleF9j b25zdHJhaW50L2pzL2luZGV4X2NvbnN0cmFpbnQuanMKaW5kZXggOTdhNDA0YS4uOTQ3OWFjZCAx MDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2luZGV4X2NvbnN0cmFpbnQvdGVtcGxh dGVzL2luZGV4X2NvbnN0cmFpbnQvanMvaW5kZXhfY29uc3RyYWludC5qcworKysgYi93ZWIvcGdh ZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJs ZXMvY29uc3RyYWludHMvaW5kZXhfY29uc3RyYWludC90ZW1wbGF0ZXMvaW5kZXhfY29uc3RyYWlu dC9qcy9pbmRleF9jb25zdHJhaW50LmpzCkBAIC02LDYgKzYsNyBAQCBkZWZpbmUoJ3BnYWRtaW4u bm9kZS57e25vZGVfdHlwZX19JywgWwogICAvLyBFeHRlbmQgdGhlIGJyb3dzZXIncyBub2RlIGNs YXNzIGZvciBpbmRleCBjb25zdHJhaW50IG5vZGUKICAgaWYgKCFwZ0Jyb3dzZXIuTm9kZXNbJ3t7 bm9kZV90eXBlfX0nXSkgewogICAgIHBnQWRtaW4uQnJvd3Nlci5Ob2Rlc1sne3tub2RlX3R5cGV9 fSddID0gcGdCcm93c2VyLk5vZGUuZXh0ZW5kKHsKKyAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5 OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgdHlwZTogJ3t7 bm9kZV90eXBlfX0nLAogICAgICAgbGFiZWw6ICd7eyBub2RlX2xhYmVsIH19JywKICAgICAgIGNv bGxlY3Rpb25fdHlwZTogJ2NvbGwtY29uc3RyYWludHMnLApAQCAtMjAsNyArMjEsNyBAQCBkZWZp bmUoJ3BnYWRtaW4ubm9kZS57e25vZGVfdHlwZX19JywgWwogICAgICAgaGFzRGVwZW5kczogdHJ1 ZSwKICAgICAgIGhhc1N0YXRpc3RpY3M6IHRydWUsCiAgICAgICBzdGF0c1ByZXR0aWZ5RmllbGRz OiBbJ0luZGV4IHNpemUnXSwKLSAgICAgIHBhcmVudF90eXBlOiAndGFibGUnLAorICAgICAgcGFy ZW50X3R5cGU6IFsndGFibGUnLCdwYXJ0aXRpb24nXSwKICAgICAgIGNhbkRyb3A6IHRydWUsCiAg ICAgICBjYW5Ecm9wQ2FzY2FkZTogdHJ1ZSwKICAgICAgIEluaXQ6IGZ1bmN0aW9uKCkgewpAQCAt NDUsMTIgKzQ2LDI4IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnt7bm9kZV90eXBlfX0nLCBbCiAg ICAgICAgIGlmIChkYXRhICYmIGRhdGEuY2hlY2sgPT0gZmFsc2UpCiAgICAgICAgICAgcmV0dXJu IHRydWU7CiAKLSAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwgaSA9IGl0ZW0sIGQgPSBp dGVtRGF0YSwgcGFyZW50cyA9IFtdOworICAgICAgICB2YXIgdCA9IHBnQnJvd3Nlci50cmVlLCBp ID0gaXRlbSwgZCA9IGl0ZW1EYXRhLCBwYXJlbnRzID0gW10sCisgICAgICAgICAgaW1tZWRpYXRl X3BhcmVudF90YWJsZV9mb3VuZCA9IGZhbHNlLAorICAgICAgICAgIGlzX2ltbWVkaWF0ZV9wYXJl bnRfdGFibGVfcGFydGl0aW9uZWQgPSBmYWxzZTsKKwogICAgICAgICAvLyBUbyBpdGVyYXRlIG92 ZXIgdHJlZSB0byBjaGVjayBwYXJlbnQgbm9kZQogICAgICAgICB3aGlsZSAoaSkgewotICAgICAg ICAgIC8vIElmIGl0IGlzIHNjaGVtYSB0aGVuIGFsbG93IHVzZXIgdG8gYyByZWF0ZSB0YWJsZQor ICAgICAgICAgIC8vIElmIHRhYmxlIGlzIHBhcnRpdGlvbmVkIHRhYmxlIHRoZW4gcmV0dXJuIGZh bHNlCisgICAgICAgICAgaWYgKCFpbW1lZGlhdGVfcGFyZW50X3RhYmxlX2ZvdW5kICYmIChkLl90 eXBlID09ICd0YWJsZScgfHwgZC5fdHlwZSA9PSAncGFydGl0aW9uJykpIHsKKyAgICAgICAgICAg IGltbWVkaWF0ZV9wYXJlbnRfdGFibGVfZm91bmQgPSB0cnVlOworICAgICAgICAgICAgaWYgKCdp c19wYXJ0aXRpb25lZCcgaW4gZCAmJiBkLmlzX3BhcnRpdGlvbmVkKSB7CisgICAgICAgICAgICAg ICAgaXNfaW1tZWRpYXRlX3BhcmVudF90YWJsZV9wYXJ0aXRpb25lZCA9IHRydWU7CisgICAgICAg ICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgLy8gSWYgaXQgaXMgc2NoZW1hIHRoZW4g YWxsb3cgdXNlciB0byBjcmVhdGUgdGFibGUKICAgICAgICAgICBpZiAoXy5pbmRleE9mKFsnc2No ZW1hJ10sIGQuX3R5cGUpID4gLTEpIHsKICAgICAgICAgICAgIHslIGlmIG5vZGVfdHlwZSA9PSAn cHJpbWFyeV9rZXknICV9CisKKyAgICAgICAgICAgIGlmIChpc19pbW1lZGlhdGVfcGFyZW50X3Rh YmxlX3BhcnRpdGlvbmVkKSB7CisgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg ICAgIH0KKwogICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIHByaW1hcnkg a2V5IHBlciB0YWJsZS4KICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IHQuY2hpbGRyZW4oYXJn dW1lbnRzWzFdLCBmYWxzZSksCiAgICAgICAgICAgICAgIHByaW1hcnlfa2V5X2ZvdW5kID0gZmFs c2U7CkBAIC02Myw3ICs4MCw3IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnt7bm9kZV90eXBlfX0n LCBbCiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybiAhcHJpbWFyeV9rZXlfZm91 bmQ7CiAgICAgICAgICAgICB7JSBlbHNlICV9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg ICAgICAgICAgIHJldHVybiAhaXNfaW1tZWRpYXRlX3BhcmVudF90YWJsZV9wYXJ0aXRpb25lZDsK ICAgICAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgICAgfQogICAgICAgICAgIHBhcmVudHMu cHVzaChkLl90eXBlKTsKQEAgLTc0LDcgKzkxLDcgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUue3tu b2RlX3R5cGV9fScsIFsKICAgICAgICAgaWYgKF8uaW5kZXhPZihwYXJlbnRzLCAnY2F0YWxvZycp ID4gLTEpIHsKICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiAhaXNfaW1tZWRpYXRlX3Bh cmVudF90YWJsZV9wYXJ0aXRpb25lZDsKICAgICAgICAgfQogICAgICAgfSwKIApkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL3RlbXBsYXRlcy9jb25zdHJhaW50cy9qcy9jb25zdHJh aW50cy5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy90ZW1wbGF0ZXMvY29uc3RyYWludHMvanMv Y29uc3RyYWludHMuanMKaW5kZXggYTczNDZmMS4uZTM3MmIzYyAxMDA2NDQKLS0tIGEvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFi bGVzL2NvbnN0cmFpbnRzL3RlbXBsYXRlcy9jb25zdHJhaW50cy9qcy9jb25zdHJhaW50cy5qcwor KysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv c2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvdGVtcGxhdGVzL2NvbnN0cmFpbnRzL2pzL2NvbnN0 cmFpbnRzLmpzCkBAIC05LDE2ICs5LDE4IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmNvbnN0cmFp bnRzJywgWwogICAgICAgICBub2RlOiAnY29uc3RyYWludHMnLAogICAgICAgICBsYWJlbDogZ2V0 dGV4dCgnQ29uc3RyYWludHMnKSwKICAgICAgICAgdHlwZTogJ2NvbGwtY29uc3RyYWludHMnLAor ICAgICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdCcm93c2VyLnRhYmxlQ2hpbGRUcmVlTm9k ZUhpZXJhcmNoeSwKICAgICAgICAgY29sdW1uczogWyduYW1lJywgJ2NvbW1lbnQnXQogICAgICAg fSk7CiAgIH07CiAKICAgaWYgKCFwZ0Jyb3dzZXIuTm9kZXNbJ2NvbnN0cmFpbnRzJ10pIHsKICAg ICBwZ0FkbWluLkJyb3dzZXIuTm9kZXNbJ2NvbnN0cmFpbnRzJ10gPSBwZ0Jyb3dzZXIuTm9kZS5l eHRlbmQoeworICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6IHBnQnJvd3Nlci50YWJsZUNoaWxk VHJlZU5vZGVIaWVyYXJjaHksCiAgICAgICB0eXBlOiAnY29uc3RyYWludHMnLAogICAgICAgbGFi ZWw6IGdldHRleHQoJ0NvbnN0cmFpbnRzJyksCiAgICAgICBjb2xsZWN0aW9uX3R5cGU6ICdjb2xs LWNvbnN0cmFpbnRzJywKLSAgICAgIHBhcmVudF90eXBlOiBbJ3RhYmxlJ10sCisgICAgICBwYXJl bnRfdHlwZTogWyd0YWJsZScsJ3BhcnRpdGlvbiddLAogICAgICAgSW5pdDogZnVuY3Rpb24oKSB7 CiAgICAgICAgIC8qIEF2b2lkIG11bGl0cGxlIHJlZ2lzdHJhdGlvbiBvZiBtZW51cyAqLwogICAg ICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9pbmRleGVz L19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2luZGV4ZXMvX19pbml0X18ucHkKaW5kZXggZTUyYzE1 Yi4uMTNmOWQ4NiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2luZGV4ZXMvX19pbml0X18ucHkKKysr IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvdGFibGVzL2luZGV4ZXMvX19pbml0X18ucHkKQEAgLTcyLDEyICs3MiwyOCBAQCBjbGFz cyBJbmRleGVzTW9kdWxlKENvbGxlY3Rpb25Ob2RlTW9kdWxlKToKICAgICAgICAgaWYgc3VwZXIo SW5kZXhlc01vZHVsZSwgc2VsZikuQmFja2VuZFN1cHBvcnRlZChtYW5hZ2VyLCAqKmt3YXJncyk6 CiAgICAgICAgICAgICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRpZD1rd2FyZ3NbJ2RpZCdd KQogCisgICAgICAgICAgICAjIEluIGNhc2Ugb2YgcGFydGl0aW9uZWQgdGFibGUgcmV0dXJuIGZh bHNlLgorICAgICAgICAgICAgaWYgJ3RpZCcgaW4ga3dhcmdzIGFuZCBtYW5hZ2VyLnZlcnNpb24g Pj0gMTAwMDAwOgorICAgICAgICAgICAgICAgIHBhcnRpdGlvbl9wYXRoID0gJ3BhcnRpdGlvbi9z cWwvI3swfSMnLmZvcm1hdChtYW5hZ2VyLnZlcnNpb24pCisgICAgICAgICAgICAgICAgU1FMID0g cmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbcGFydGl0aW9u X3BhdGgsICdiYWNrZW5kX3N1cHBvcnQuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICB0aWQ9 a3dhcmdzWyd0aWQnXQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBzdGF0dXMs IHJlcyA9IGNvbm4uZXhlY3V0ZV9zY2FsYXIoU1FMKQorCisgICAgICAgICAgICAgICAgIyBjaGVj ayBpZiBhbnkgZXJyb3JzCisgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisg ICAgICAgICAgICAgICAgcmV0dXJuIG5vdCByZXMKKwogICAgICAgICAgICAgaWYgJ3ZpZCcgbm90 IGluIGt3YXJnczoKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgICAgICAgICB0 ZW1wbGF0ZV9wYXRoID0gJ2luZGV4L3NxbC8jezB9IycuZm9ybWF0KG1hbmFnZXIudmVyc2lvbikK LSAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKLSAgICAgICAgICAg ICAgICBbdGVtcGxhdGVfcGF0aCwgJ2JhY2tlbmRfc3VwcG9ydC5zcWwnXSksIHZpZD1rd2FyZ3Nb J3ZpZCddKQorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAg ICAgICIvIi5qb2luKFt0ZW1wbGF0ZV9wYXRoLCAnYmFja2VuZF9zdXBwb3J0LnNxbCddKSwKKyAg ICAgICAgICAgICAgICB2aWQ9a3dhcmdzWyd2aWQnXQorICAgICAgICAgICAgKQogICAgICAgICAg ICAgc3RhdHVzLCByZXMgPSBjb25uLmV4ZWN1dGVfc2NhbGFyKFNRTCkKIAogICAgICAgICAgICAg IyBjaGVjayBpZiBhbnkgZXJyb3JzCkBAIC0yMzksOSArMjU1LDEwIEBAIGNsYXNzIEluZGV4ZXNW aWV3KFBHQ2hpbGROb2RlVmlldyk6CiAgICAgICAgICAgICAjIFdlIG5lZWQgcGFyZW50J3MgbmFt ZSBlZyB0YWJsZSBuYW1lIGFuZCBzY2hlbWEgbmFtZQogICAgICAgICAgICAgIyB3aGVuIHdlIGNy ZWF0ZSBuZXcgaW5kZXggaW4gdXBkYXRlIHdlIGNhbiBmZXRjaCBpdCB1c2luZwogICAgICAgICAg ICAgIyBwcm9wZXJ0eSBzcWwKLSAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIu am9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnZ2V0X3BhcmVudC5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGlkPWt3YXJnc1sndGlkJ10pCisgICAgICAgICAgICBTUUwgPSByZW5kZXJf dGVtcGxhdGUoCisgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwg J2dldF9wYXJlbnQuc3FsJ10pLAorICAgICAgICAgICAgICAgIHRpZD1rd2FyZ3NbJ3RpZCddCisg ICAgICAgICAgICApCiAgICAgICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0 ZV8yZGFycmF5KFNRTCkKICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CiAgICAgICAgICAgICAg ICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQpAQCAtMjYyLDgg KzI3OSw5IEBAIGNsYXNzIEluZGV4ZXNWaWV3KFBHQ2hpbGROb2RlVmlldyk6CiAgICAgICAgICIi IgogICAgICAgICByZXMgPSBbeydsYWJlbCc6ICcnLCAndmFsdWUnOiAnJ31dCiAgICAgICAgIHRy eToKLSAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1w bGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn Z2V0X2NvbGxhdGlvbnMuc3FsJ10pKQorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRl KAorICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsICdnZXRfY29s bGF0aW9ucy5zcWwnXSkKKyAgICAgICAgICAgICkKICAgICAgICAgICAgIHN0YXR1cywgcnNldCA9 IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQogICAgICAgICAgICAgaWYgbm90IHN0YXR1 czoKICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXJlcykKQEAgLTI4OSw4ICszMDcsNyBAQCBjbGFzcyBJbmRleGVzVmlldyhQR0NoaWxkTm9kZVZp ZXcpOgogICAgICAgICAiIiIKICAgICAgICAgcmVzID0gW3snbGFiZWwnOiAnJywgJ3ZhbHVlJzog Jyd9XQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8i LmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ2dldF9hbS5zcWwnXSkpCisgICAgICAgICAgICBTUUwgPSByZW5kZXJf dGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwgJ2dldF9hbS5zcWwnXSkpCiAg ICAgICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkK ICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVy bmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCkBAIC0zMTcsMTcgKzMzNCwxNyBAQCBjbGFz cyBJbmRleGVzVmlldyhQR0NoaWxkTm9kZVZpZXcpOgogICAgICAgICByZXMgPSBkaWN0KCkKICAg ICAgICAgdHJ5OgogICAgICAgICAgICAgIyBGZXRjaGluZyBhbGwgdGhlIGFjY2VzcyBtZXRob2Rz Ci0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxh dGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dl dF9hbS5zcWwnXSkpCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4o W3NlbGYudGVtcGxhdGVfcGF0aCwgJ2dldF9hbS5zcWwnXSkpCiAgICAgICAgICAgICBzdGF0dXMs IHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKICAgICAgICAgICAgIGlmIG5v dCBzdGF0dXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihl cnJvcm1zZz1yZXMpCiAKICAgICAgICAgICAgIGZvciByb3cgaW4gcnNldFsncm93cyddOgogICAg ICAgICAgICAgICAgICMgRmV0Y2hpbmcgYWxsIHRoZSBvcF9jbGFzc2VzIGZvciBlYWNoIGFjY2Vz cyBtZXRob2QKLSAgICAgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4o W3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdnZXRfb3BfY2xhc3Muc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBvaWQ9cm93WydvaWQnXSkKKyAgICAgICAgICAgICAgICBTUUwgPSBy ZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRlbXBs YXRlX3BhdGgsICdnZXRfb3BfY2xhc3Muc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICBvaWQ9 cm93WydvaWQnXQorICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICBzdGF0dXMsIHJl c3VsdCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQogICAgICAgICAgICAgICAgIGlm IG5vdCBzdGF0dXM6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9cmVzKQpAQCAtMzY1LDggKzM4Miw5IEBAIGNsYXNzIEluZGV4ZXNWaWV3 KFBHQ2hpbGROb2RlVmlldyk6CiAgICAgICAgICAgICBKU09OIG9mIGF2YWlsYWJsZSBzY2hlbWEg bm9kZXMKICAgICAgICAgIiIiCiAKLSAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ25vZGVzLnNxbCddKSwgdGlkPXRpZCkKKyAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwgJ25vZGVz LnNxbCddKSwgdGlkPXRpZAorICAgICAgICApCiAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5j b25uLmV4ZWN1dGVfZGljdChTUUwpCiAKICAgICAgICAgaWYgbm90IHN0YXR1czoKQEAgLTM5Mywx MCArNDExLDEwIEBAIGNsYXNzIEluZGV4ZXNWaWV3KFBHQ2hpbGROb2RlVmlldyk6CiAgICAgICAg IFJldHVybnM6CiAgICAgICAgICAgICBKU09OIG9mIGF2YWlsYWJsZSBzY2hlbWEgY2hpbGQgbm9k ZXMKICAgICAgICAgIiIiCi0gICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihb c2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdub2Rlcy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlk LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4PWlkeCkKKyAgICAgICAgU1FMID0g cmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0 aCwgJ25vZGVzLnNxbCddKSwKKyAgICAgICAgICAgIHRpZD10aWQsIGlkeD1pZHgKKyAgICAgICAg KQogICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkK ICAgICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2 ZXJfZXJyb3IoZXJyb3Jtc2c9cnNldCkKQEAgLTQzMyw4ICs0NTEsOSBAQCBjbGFzcyBJbmRleGVz VmlldyhQR0NoaWxkTm9kZVZpZXcpOgogICAgICAgICAgICAgSlNPTiBvZiBhdmFpbGFibGUgc2No ZW1hIGNoaWxkIG5vZGVzCiAgICAgICAgICIiIgogICAgICAgICByZXMgPSBbXQotICAgICAgICBT UUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9kZXMuc3FsJ10pLCB0aWQ9dGlk KQorICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAiLyIuam9pbihb c2VsZi50ZW1wbGF0ZV9wYXRoLCAnbm9kZXMuc3FsJ10pLCB0aWQ9dGlkCisgICAgICAgICkKICAg ICAgICAgc3RhdHVzLCByc2V0ID0gc2VsZi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCiAgICAg ICAgIGlmIG5vdCBzdGF0dXM6CiAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXJzZXQpCkBAIC00NjUsOCArNDg0LDkgQEAgY2xhc3MgSW5kZXhlc1ZpZXco UEdDaGlsZE5vZGVWaWV3KToKICAgICAgICAgICAgIFVwZGF0ZWQgcHJvcGVydGllcyBkYXRhIHdp dGggY29sdW1uIGRldGFpbHMKICAgICAgICAgIiIiCiAKLSAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ2NvbHVtbl9kZXRhaWxzLnNxbCddKSwgaWR4PWlkeCkKKyAg ICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYu dGVtcGxhdGVfcGF0aCwgJ2NvbHVtbl9kZXRhaWxzLnNxbCddKSwgaWR4PWlkeAorICAgICAgICAp CiAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQog ICAgICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz1yc2V0KQpAQCAtNTIxLDEwICs1NDEsMTAgQEAgY2xhc3MgSW5kZXhl c1ZpZXcoUEdDaGlsZE5vZGVWaWV3KToKICAgICAgICAgICAgIEpTT04gb2Ygc2VsZWN0ZWQgc2No ZW1hIG5vZGUKICAgICAgICAgIiIiCiAKLSAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGlkPWRpZCwgdGlkPXRpZCwgaWR4PWlkeCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkKQorICAgICAgICBTUUwgPSBy ZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRo LCAncHJvcGVydGllcy5zcWwnXSksCisgICAgICAgICAgICBkaWQ9ZGlkLCB0aWQ9dGlkLCBpZHg9 aWR4LCBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZAorICAgICAgICApCiAKICAgICAg ICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKIApAQCAtNTk1LDkg KzYxNSwxMCBAQCBjbGFzcyBJbmRleGVzVmlldyhQR0NoaWxkTm9kZVZpZXcpOgogICAgICAgICB0 cnk6CiAgICAgICAgICAgICAjIFN0YXJ0IHRyYW5zYWN0aW9uLgogICAgICAgICAgICAgc2VsZi5j b25uLmV4ZWN1dGVfc2NhbGFyKCJCRUdJTjsiKQotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGUuc3FsJ10pLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4sIG1vZGU9J2NyZWF0 ZScpCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAg Ii8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwgJ2NyZWF0ZS5zcWwnXSksCisgICAgICAgICAg ICAgICAgZGF0YT1kYXRhLCBjb25uPXNlbGYuY29ubiwgbW9kZT0nY3JlYXRlJworICAgICAgICAg ICAgKQogICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIo U1FMKQogICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgICAgICAjIEVuZCB0 cmFuc2FjdGlvbi4KQEAgLTYwNiw5ICs2MjcsMTAgQEAgY2xhc3MgSW5kZXhlc1ZpZXcoUEdDaGls ZE5vZGVWaWV3KToKIAogICAgICAgICAgICAgIyBJZiB1c2VyIGNob29zZXMgY29uY3VycmVudCBp bmRleCB0aGVuIHdlIGNhbm5vdCBydW4gaXQgYWxvbmcKICAgICAgICAgICAgICMgd2l0aCBvdGhl ciBhbHRlciBzdGF0ZW1lbnRzIHNvIHdlIHdpbGwgc2VwYXJhdGUgYWx0ZXIgaW5kZXggcGFydAot ICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRl X3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbHRl ci5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBj b25uPXNlbGYuY29ubikKKyAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAg ICAgICAgICAgICAiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAnYWx0ZXIuc3FsJ10pLAor ICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4KKyAgICAgICAgICAgICkK ICAgICAgICAgICAgIFNRTCA9IFNRTC5zdHJpcCgnXG4nKS5zdHJpcCgnICcpCiAgICAgICAgICAg ICBpZiBTUUwgIT0gJyc6CiAgICAgICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4u ZXhlY3V0ZV9zY2FsYXIoU1FMKQpAQCAtNjE4LDkgKzY0MCwxMCBAQCBjbGFzcyBJbmRleGVzVmll dyhQR0NoaWxkTm9kZVZpZXcpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxf c2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKIAogICAgICAgICAgICAgIyB3ZSBuZWVkIG9pZCB0 byB0byBhZGQgb2JqZWN0IGluIHRyZWUgYXQgYnJvd3NlcgotICAgICAgICAgICAgU1FMID0gcmVu ZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfb2lkLnNxbCddKSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkLCBkYXRhPWRhdGEpCisgICAgICAgICAg ICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYu dGVtcGxhdGVfcGF0aCwgJ2dldF9vaWQuc3FsJ10pLAorICAgICAgICAgICAgICAgIHRpZD10aWQs IGRhdGE9ZGF0YQorICAgICAgICAgICAgKQogICAgICAgICAgICAgc3RhdHVzLCBpZHggPSBzZWxm LmNvbm4uZXhlY3V0ZV9zY2FsYXIoU1FMKQogICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKICAg ICAgICAgICAgICAgICAjIEVuZCB0cmFuc2FjdGlvbi4KQEAgLTY2NSwxMCArNjg4LDEwIEBAIGNs YXNzIEluZGV4ZXNWaWV3KFBHQ2hpbGROb2RlVmlldyk6CiAgICAgICAgIHRyeToKICAgICAgICAg ICAgICMgV2Ugd2lsbCBmaXJzdCBmZXRjaCB0aGUgaW5kZXggbmFtZSBmb3IgY3VycmVudCByZXF1 ZXN0CiAgICAgICAgICAgICAjIHNvIHRoYXQgd2UgY3JlYXRlIHRlbXBsYXRlIGZvciBkcm9wcGlu ZyBpbmRleAotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxm LnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkaWQ9ZGlkLCB0aWQ9dGlkLCBpZHg9aWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkKQorICAgICAgICAgICAgU1FM ID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRlbXBs YXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICBkaWQ9ZGlkLCB0 aWQ9dGlkLCBpZHg9aWR4LCBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZAorICAgICAg ICAgICAgKQogCiAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2Rp Y3QoU1FMKQogICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKQEAgLTY4Nyw5ICs3MTAsMTAgQEAg Y2xhc3MgSW5kZXhlc1ZpZXcoUEdDaGlsZE5vZGVWaWV3KToKIAogICAgICAgICAgICAgZGF0YSA9 IGRpY3QocmVzWydyb3dzJ11bMF0pCiAKLSAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0 ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnZGVsZXRlLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25uLCBjYXNjYWRlPWNhc2NhZGUp CisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgIi8i LmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwgJ2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICAg ICAgZGF0YT1kYXRhLCBjb25uPXNlbGYuY29ubiwgY2FzY2FkZT1jYXNjYWRlCisgICAgICAgICAg ICApCiAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX3NjYWxhcihT UUwpCiAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgICAgIHJldHVybiBp bnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQpAQCAtNzg3LDEwICs4MTEsMTAgQEAg Y2xhc3MgSW5kZXhlc1ZpZXcoUEdDaGlsZE5vZGVWaWV3KToKICAgICAgICAgVGhpcyBmdW5jdGlv biB3aWxsIGdlbnJhdGUgc3FsIGZyb20gbW9kZWwgZGF0YQogICAgICAgICAiIiIKICAgICAgICAg aWYgaWR4IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkaWQ9ZGlkLCB0aWQ9dGlkLCBpZHg9aWR4LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkKQorICAg ICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICIvIi5qb2lu KFtzZWxmLnRlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgICAg ICBkaWQ9ZGlkLCB0aWQ9dGlkLCBpZHg9aWR4LCBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5 c29pZAorICAgICAgICAgICAgKQogCiAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29u bi5leGVjdXRlX2RpY3QoU1FMKQogICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKQEAgLTgyNiwx MSArODUwLDE1IEBAIGNsYXNzIEluZGV4ZXNWaWV3KFBHQ2hpbGROb2RlVmlldyk6CiAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBnZXR0ZXh0KCctLSBkZWZpbml0aW9uIGluY29tcGxldGUnKQog CiAgICAgICAgICAgICAjIElmIHRoZSByZXF1ZXN0IGZvciBuZXcgb2JqZWN0IHdoaWNoIGRvIG5v dCBoYXZlIGRpZAotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtz ZWxmLnRlbXBsYXRlX3BhdGgsICdjcmVhdGUuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4sIG1vZGU9bW9kZSkKKyAgICAg ICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAiLyIuam9pbihb c2VsZi50ZW1wbGF0ZV9wYXRoLCAnY3JlYXRlLnNxbCddKSwKKyAgICAgICAgICAgICAgICBkYXRh PWRhdGEsIGNvbm49c2VsZi5jb25uLCBtb2RlPW1vZGUKKyAgICAgICAgICAgICkKICAgICAgICAg ICAgIFNRTCArPSAiXG4iCi0gICAgICAgICAgICBTUUwgKz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsICdhbHRlci5zcWwnXSksCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCisgICAgICAgICAg ICBTUUwgKz0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxm LnRlbXBsYXRlX3BhdGgsICdhbHRlci5zcWwnXSksCisgICAgICAgICAgICAgICAgZGF0YT1kYXRh LCBjb25uPXNlbGYuY29ubgorICAgICAgICAgICAgKQogCiAgICAgICAgIHJldHVybiBTUUwsIGRh dGFbJ25hbWUnXSBpZiAnbmFtZScgaW4gZGF0YSBlbHNlIG9sZF9kYXRhWyduYW1lJ10KIApAQCAt ODQ4LDEwICs4NzYsMTAgQEAgY2xhc3MgSW5kZXhlc1ZpZXcoUEdDaGlsZE5vZGVWaWV3KToKICAg ICAgICAgICAgaWR4OiBJbmRleCBJRAogICAgICAgICAiIiIKIAotICAgICAgICBTUUwgPSByZW5k ZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkaWQ9ZGlkLCB0aWQ9dGlkLCBpZHg9aWR4LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCisg ICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICIvIi5qb2luKFtzZWxm LnRlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgIGRpZD1kaWQs IHRpZD10aWQsIGlkeD1pZHgsIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkCisgICAg ICAgICkKIAogICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FM KQogICAgICAgICBpZiBub3Qgc3RhdHVzOgpAQCAtODcyLDkgKzkwMCwxMCBAQCBjbGFzcyBJbmRl eGVzVmlldyhQR0NoaWxkTm9kZVZpZXcpOgogICAgICAgICAgICAgcmV0dXJuIFNRTAogICAgICAg ICBzcWxfaGVhZGVyID0gdSItLSBJbmRleDogezB9XG5cbi0tICIuZm9ybWF0KGRhdGFbJ25hbWUn XSkKIAotICAgICAgICBzcWxfaGVhZGVyICs9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2Vs Zi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ2RlbGV0ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCisgICAgICAgIHNxbF9oZWFkZXIgKz0g cmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0 aCwgJ2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25u CisgICAgICAgICkKIAogICAgICAgICBTUUwgPSBzcWxfaGVhZGVyICsgJ1xuXG4nICsgU1FMCiAK QEAgLTk1OSwxMCArOTg4LDExIEBAIGNsYXNzIEluZGV4ZXNWaWV3KFBHQ2hpbGROb2RlVmlldyk6 CiAKICAgICAgICAgICAgIGlmIGlzX3Bnc3RhdHR1cGxlOgogICAgICAgICAgICAgICAgICMgRmV0 Y2ggaW5kZXggZGV0YWlscyBvbmx5IGlmIGV4dGVuZGVkIHN0YXRzIGF2YWlsYWJsZQotICAgICAg ICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9w YXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3By b3BlcnRpZXMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk aWQ9ZGlkLCB0aWQ9dGlkLCBpZHg9aWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKKyAgICAgICAgICAgICAg ICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtz ZWxmLnRlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAg ICAgZGlkPWRpZCwgdGlkPXRpZCwgaWR4PWlkeCwKKyAgICAgICAgICAgICAgICAgICAgZGF0bGFz dHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQKKyAgICAgICAgICAgICAgICApCiAgICAgICAgICAg ICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKICAgICAgICAg ICAgICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJu YWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9pbmRl eGVzL3RlbXBsYXRlcy9pbmRleC9qcy9pbmRleC5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2Vy dmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9pbmRleGVzL3RlbXBs YXRlcy9pbmRleC9qcy9pbmRleC5qcwppbmRleCAyNGYzN2YwLi40ZmMxZDU0IDEwMDY0NAotLS0g YS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2No ZW1hcy90YWJsZXMvaW5kZXhlcy90ZW1wbGF0ZXMvaW5kZXgvanMvaW5kZXguanMKKysrIGIvd2Vi L3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMv dGFibGVzL2luZGV4ZXMvdGVtcGxhdGVzL2luZGV4L2pzL2luZGV4LmpzCkBAIC0xMCw2ICsxMCw3 IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmluZGV4JywgWwogICAgICAgICBub2RlOiAnaW5kZXgn LAogICAgICAgICBsYWJlbDogZ2V0dGV4dCgnSW5kZXhlcycpLAogICAgICAgICB0eXBlOiAnY29s bC1pbmRleCcsCisgICAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVD aGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgICBzcWxBbHRlckhlbHA6ICdzcWwtYWx0ZXJp bmRleC5odG1sJywKICAgICAgICAgc3FsQ3JlYXRlSGVscDogJ3NxbC1jcmVhdGVpbmRleC5odG1s JywKICAgICAgICAgZGlhbG9nSGVscDogdXJsX2ZvcignaGVscC5zdGF0aWMnLCB7J2ZpbGVuYW1l JzogJ2luZGV4X2RpYWxvZy5odG1sJ30pLApAQCAtMjEwLDggKzIxMSw5IEBAIGRlZmluZSgncGdh ZG1pbi5ub2RlLmluZGV4JywgWwogICAgIH0pOwogCiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydp bmRleCddKSB7Ci0gICAgcGdBZG1pbi5Ccm93c2VyLk5vZGVzWydpbmRleCddID0gcGdBZG1pbi5C cm93c2VyLk5vZGUuZXh0ZW5kKHsKLSAgICAgIHBhcmVudF90eXBlOiBbJ3RhYmxlJywgJ3ZpZXcn LCAnbXZpZXcnXSwKKyAgICBwZ0FkbWluLkJyb3dzZXIuTm9kZXNbJ2luZGV4J10gPSBwZ0Jyb3dz ZXIuTm9kZS5leHRlbmQoeworICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6IHBnQnJvd3Nlci50 YWJsZUNoaWxkVHJlZU5vZGVIaWVyYXJjaHksCisgICAgICBwYXJlbnRfdHlwZTogWyd0YWJsZScs ICd2aWV3JywgJ212aWV3JywgJ3BhcnRpdGlvbiddLAogICAgICAgY29sbGVjdGlvbl90eXBlOiBb J2NvbGwtdGFibGUnLCAnY29sbC12aWV3J10sCiAgICAgICBzcWxBbHRlckhlbHA6ICdzcWwtYWx0 ZXJpbmRleC5odG1sJywKICAgICAgIHNxbENyZWF0ZUhlbHA6ICdzcWwtY3JlYXRlaW5kZXguaHRt bCcsCkBAIC0yNDcsNiArMjQ5LDEyIEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmluZGV4JywgWwog ICAgICAgICAgIGljb246ICd3Y1RhYkljb24gaWNvbi1pbmRleCcsIGRhdGE6IHthY3Rpb246ICdj cmVhdGUnLCBjaGVjazogdHJ1ZX0sCiAgICAgICAgICAgZW5hYmxlOiAnY2FuQ3JlYXRlJwogICAg ICAgICB9LHsKKyAgICAgICAgICBuYW1lOiAnY3JlYXRlX2luZGV4X29uUGFydGl0aW9uJywgbm9k ZTogJ3BhcnRpdGlvbicsIG1vZHVsZTogdGhpcywKKyAgICAgICAgICBhcHBsaWVzOiBbJ29iamVj dCcsICdjb250ZXh0J10sIGNhbGxiYWNrOiAnc2hvd19vYmpfcHJvcGVydGllcycsCisgICAgICAg ICAgY2F0ZWdvcnk6ICdjcmVhdGUnLCBwcmlvcml0eTogNCwgbGFiZWw6IGdldHRleHQoJ0luZGV4 Li4uJyksCisgICAgICAgICAgaWNvbjogJ3djVGFiSWNvbiBpY29uLWluZGV4JywgZGF0YToge2Fj dGlvbjogJ2NyZWF0ZScsIGNoZWNrOiB0cnVlfSwKKyAgICAgICAgICBlbmFibGU6ICdjYW5DcmVh dGUnCisgICAgICAgIH0sewogICAgICAgICAgIG5hbWU6ICdjcmVhdGVfaW5kZXhfb25NYXRWaWV3 Jywgbm9kZTogJ212aWV3JywgbW9kdWxlOiB0aGlzLAogICAgICAgICAgIGFwcGxpZXM6IFsnb2Jq ZWN0JywgJ2NvbnRleHQnXSwgY2FsbGJhY2s6ICdzaG93X29ial9wcm9wZXJ0aWVzJywKICAgICAg ICAgICBjYXRlZ29yeTogJ2NyZWF0ZScsIHByaW9yaXR5OiA1LCBsYWJlbDogZ2V0dGV4dCgnSW5k ZXguLi4nKSwKQEAgLTQ3MiwxMiArNDgwLDIzIEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmluZGV4 JywgWwogICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEuY2hlY2sgPT0gZmFsc2UpCiAgICAgICAg ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsIGkg PSBpdGVtLCBkID0gaXRlbURhdGEsIHBhcmVudHMgPSBbXTsKKyAgICAgICAgICB2YXIgdCA9IHBn QnJvd3Nlci50cmVlLCBpID0gaXRlbSwgZCA9IGl0ZW1EYXRhLCBwYXJlbnRzID0gW10sCisgICAg ICAgICAgICBpbW1lZGlhdGVfcGFyZW50X3RhYmxlX2ZvdW5kID0gZmFsc2UsCisgICAgICAgICAg ICBpc19pbW1lZGlhdGVfcGFyZW50X3RhYmxlX3BhcnRpdGlvbmVkID0gZmFsc2U7CiAgICAgICAg ICAgLy8gVG8gaXRlcmF0ZSBvdmVyIHRyZWUgdG8gY2hlY2sgcGFyZW50IG5vZGUKICAgICAgICAg ICB3aGlsZSAoaSkgewotICAgICAgICAgICAgLy8gSWYgaXQgaXMgc2NoZW1hIHRoZW4gYWxsb3cg dXNlciB0byBjIHJlYXRlIHRhYmxlCisgICAgICAgICAgICAvLyBEbyBub3QgYWxsb3cgY3JlYXRp bmcgaW5kZXggb24gcGFydGl0aW9uZWQgdGFibGVzLgorICAgICAgICAgICAgaWYgKCFpbW1lZGlh dGVfcGFyZW50X3RhYmxlX2ZvdW5kICYmCisgICAgICAgICAgICAgICAgXy5pbmRleE9mKFsndGFi bGUnLCAncGFydGl0aW9uJ10sIGQuX3R5cGUpID4gLTEpIHsKKyAgICAgICAgICAgICAgaW1tZWRp YXRlX3BhcmVudF90YWJsZV9mb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgIGlmICgnaXNfcGFy dGl0aW9uZWQnIGluIGQgJiYgZC5pc19wYXJ0aXRpb25lZCkgeworICAgICAgICAgICAgICAgIGlz X2ltbWVkaWF0ZV9wYXJlbnRfdGFibGVfcGFydGl0aW9uZWQgPSB0cnVlOworICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIGl0IGlzIHNjaGVtYSB0aGVu IGFsbG93IHVzZXIgdG8gY3JlYXRlIGluZGV4CiAgICAgICAgICAgICBpZiAoXy5pbmRleE9mKFsn c2NoZW1hJ10sIGQuX3R5cGUpID4gLTEpCi0gICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg ICAgICAgICAgICByZXR1cm4gIWlzX2ltbWVkaWF0ZV9wYXJlbnRfdGFibGVfcGFydGl0aW9uZWQ7 CiAgICAgICAgICAgICBwYXJlbnRzLnB1c2goZC5fdHlwZSk7CiAgICAgICAgICAgICBpID0gdC5o YXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGw7CiAgICAgICAgICAgICBkID0gaSA/IHQu aXRlbURhdGEoaSkgOiBudWxsOwpAQCAtNDg2LDcgKzUwNSw3IEBAIGRlZmluZSgncGdhZG1pbi5u b2RlLmluZGV4JywgWwogICAgICAgICAgIGlmIChfLmluZGV4T2YocGFyZW50cywgJ2NhdGFsb2cn KSA+IC0xKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuICFpc19pbW1lZGlh dGVfcGFyZW50X3RhYmxlX3BhcnRpdGlvbmVkOwogICAgICAgICAgIH0KICAgICAgIH0KICAgfSk7 CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcGFydGl0aW9ucy9fX2luaXRfXy5weSBiL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxl cy9wYXJ0aXRpb25zL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmExYzAxMGYKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcGFydGl0aW9ucy9fX2lu aXRfXy5weQpAQCAtMCwwICsxLDU4MyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1p biA0IC0gUG9zdGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE3LCBU aGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQg dW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIiIi IEltcGxlbWVudHMgUGFydGl0aW9ucyBOb2RlICIiIgorCitpbXBvcnQgcmUKK2ltcG9ydCBzaW1w bGVqc29uIGFzIGpzb24KK2ltcG9ydCBwZ2FkbWluLmJyb3dzZXIuc2VydmVyX2dyb3Vwcy5zZXJ2 ZXJzLmRhdGFiYXNlcy5zY2hlbWFzIGFzIHNjaGVtYQorZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVy X3RlbXBsYXRlLCByZXF1ZXN0Citmcm9tIGZsYXNrX2JhYmVsIGltcG9ydCBnZXR0ZXh0Citmcm9t IHBnYWRtaW4uYnJvd3Nlci5zZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMuZGF0YWJhc2VzLnNjaGVtYXMu dXRpbHMgXAorICAgIGltcG9ydCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MKK2Zyb20g cGdhZG1pbi51dGlscy5hamF4IGltcG9ydCBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IsIFwKKyAgICBt YWtlX3Jlc3BvbnNlIGFzIGFqYXhfcmVzcG9uc2UsIGdvbmUKK2Zyb20gcGdhZG1pbi5icm93c2Vy LnNlcnZlcl9ncm91cHMuc2VydmVycy5kYXRhYmFzZXMuc2NoZW1hcy50YWJsZXMudXRpbHMgXAor ICAgIGltcG9ydCBCYXNlVGFibGVWaWV3Citmcm9tIHBnYWRtaW4uYnJvd3Nlci5jb2xsZWN0aW9u IGltcG9ydCBDb2xsZWN0aW9uTm9kZU1vZHVsZQorZnJvbSBwZ2FkbWluLnV0aWxzLmFqYXggaW1w b3J0IG1ha2VfanNvbl9yZXNwb25zZSwgcHJlY29uZGl0aW9uX3JlcXVpcmVkCitmcm9tIGNvbmZp ZyBpbXBvcnQgUEdfREVGQVVMVF9EUklWRVIKK2Zyb20gcGdhZG1pbi5icm93c2VyLnV0aWxzIGlt cG9ydCBQR0NoaWxkTW9kdWxlCisKKworY2xhc3MgUGFydGl0aW9uc01vZHVsZShDb2xsZWN0aW9u Tm9kZU1vZHVsZSk6CisgICAgIiIiCisgICAgIGNsYXNzIFBhcnRpdGlvbnNNb2R1bGUoQ29sbGVj dGlvbk5vZGVNb2R1bGUpCisKKyAgICAgICAgQSBtb2R1bGUgY2xhc3MgZm9yIFBhcnRpdGlvbiBu b2RlIGRlcml2ZWQgZnJvbSBDb2xsZWN0aW9uTm9kZU1vZHVsZS4KKworICAgIE1ldGhvZHM6Cisg ICAgLS0tLS0tLQorICAgICogX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgLSBNZXRo b2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBQYXJ0aXRpb24gYW5kIGl0J3MgYmFzZSBtb2R1 bGUuCisKKyAgICAqIGdldF9ub2RlcyhnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQpCisgICAgICAt IE1ldGhvZCBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBicm93c2VyIGNvbGxlY3Rpb24gbm9kZS4K KworICAgICogbm9kZV9pbm9kZSgpCisgICAgICAtIE1ldGhvZCBpcyBvdmVycmlkZGVuIGZyb20g aXRzIGJhc2UgY2xhc3MgdG8gbWFrZSB0aGUgbm9kZSBhcyBsZWFmIG5vZGUuCisKKyAgICAqIHNj cmlwdF9sb2FkKCkKKyAgICAgIC0gTG9hZCB0aGUgbW9kdWxlIHNjcmlwdCBmb3Igc2NoZW1hLCB3 aGVuIGFueSBvZiB0aGUgc2VydmVyIG5vZGUgaXMKKyAgICAgICAgaW5pdGlhbGl6ZWQuCisgICAg IiIiCisKKyAgICBOT0RFX1RZUEUgPSAncGFydGl0aW9uJworICAgIENPTExFQ1RJT05fTEFCRUwg PSBnZXR0ZXh0KCJQYXJ0aXRpb25zIikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywg Kiprd2FyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgTWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlh bGl6ZSB0aGUgUGFydGl0aW9uc01vZHVsZSBhbmQgaXQncyBiYXNlIG1vZHVsZS4KKworICAgICAg ICBBcmdzOgorICAgICAgICAgICAgKmFyZ3M6CisgICAgICAgICAgICAqKmt3YXJnczoKKyAgICAg ICAgIiIiCisgICAgICAgIHN1cGVyKFBhcnRpdGlvbnNNb2R1bGUsIHNlbGYpLl9faW5pdF9fKCph cmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5taW5fdmVyID0gMTAwMDAwCisgICAgICAgIHNl bGYubWF4X3ZlciA9IE5vbmUKKworICAgIGRlZiBnZXRfbm9kZXMoc2VsZiwgZ2lkLCBzaWQsIGRp ZCwgc2NpZCwgKiprd2FyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgR2VuZXJhdGUgdGhlIGNv bGxlY3Rpb24gbm9kZQorICAgICAgICAiIiIKKyAgICAgICAgeWllbGQgc2VsZi5nZW5lcmF0ZV9i cm93c2VyX2NvbGxlY3Rpb25fbm9kZShrd2FyZ3NbJ3RpZCddKQorCisgICAgQHByb3BlcnR5Cisg ICAgZGVmIHNjcmlwdF9sb2FkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgTG9hZCB0aGUg bW9kdWxlIHNjcmlwdCBmb3Igc2VydmVyLCB3aGVuIGFueSBvZiB0aGUgc2VydmVyLWdyb3VwIG5v ZGUgaXMKKyAgICAgICAgaW5pdGlhbGl6ZWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4g c2NoZW1hLlNjaGVtYU1vZHVsZS5OT0RFX1RZUEUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBu b2RlX2lub2RlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgTG9hZCB0aGUgbW9kdWxlIG5v ZGUgYXMgYSBsZWFmIG5vZGUKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBUcnVlCisKKyAg ICBkZWYgQmFja2VuZFN1cHBvcnRlZChzZWxmLCBtYW5hZ2VyLCAqKmt3YXJncyk6CisgICAgICAg ICIiIgorICAgICAgICBMb2FkIHRoaXMgbW9kdWxlIGlmIGl0IGlzIGEgcGFydGl0aW9uIHRhYmxl CisgICAgICAgICIiIgorICAgICAgICBpZiAndGlkJyBpbiBrd2FyZ3MgYW5kIENvbGxlY3Rpb25O b2RlTW9kdWxlLkJhY2tlbmRTdXBwb3J0ZWQoc2VsZiwgbWFuYWdlciwgKiprd2FyZ3MpOgorICAg ICAgICAgICAgY29ubiA9IG1hbmFnZXIuY29ubmVjdGlvbihkaWQ9a3dhcmdzWydkaWQnXSkKKwor ICAgICAgICAgICAgdGVtcGxhdGVfcGF0aCA9ICdwYXJ0aXRpb24vc3FsLyN7MH0jJy5mb3JtYXQo bWFuYWdlci52ZXJzaW9uKQorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKAorICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZV9wYXRoLCAnYmFja2VuZF9zdXBwb3J0LnNx bCddKSwgdGlkPWt3YXJnc1sndGlkJ10pCisgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IGNvbm4u ZXhlY3V0ZV9zY2FsYXIoU1FMKQorCisgICAgICAgICAgICAjIGNoZWNrIGlmIGFueSBlcnJvcnMK KyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVy bmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgICAgIHJldHVybiByZXMK KworICAgIGRlZiByZWdpc3RlcihzZWxmLCBhcHAsIG9wdGlvbnMsIGZpcnN0X3JlZ2lzdHJhdGlv bj1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBPdmVycmlkZSB0aGUgZGVmYXVsdCByZWdp c3RlciBmdW5jdGlvbiB0byBhdXRvbWF0aWNhbGx5IHJlZ2lzdGVyCisgICAgICAgIHN1Yi1tb2R1 bGVzIG9mIHRhYmxlIG5vZGUgdW5kZXIgcGFydGl0aW9uIHRhYmxlIG5vZGUuCisgICAgICAgICIi IgorCisgICAgICAgIGlmIGZpcnN0X3JlZ2lzdHJhdGlvbjoKKyAgICAgICAgICAgIHNlbGYuc3Vi bW9kdWxlcyA9IGxpc3QoYXBwLmZpbmRfc3VibW9kdWxlcyhzZWxmLmltcG9ydF9uYW1lKSkKKwor ICAgICAgICBzdXBlcihDb2xsZWN0aW9uTm9kZU1vZHVsZSwgc2VsZikucmVnaXN0ZXIoYXBwLCBv cHRpb25zLCBmaXJzdF9yZWdpc3RyYXRpb24pCisKKyAgICAgICAgZm9yIG1vZHVsZSBpbiBzZWxm LnN1Ym1vZHVsZXM6CisgICAgICAgICAgICBpZiBmaXJzdF9yZWdpc3RyYXRpb246CisgICAgICAg ICAgICAgICAgbW9kdWxlLnBhcmVudG1vZHVsZXMuYXBwZW5kKHNlbGYpCisgICAgICAgICAgICBh cHAucmVnaXN0ZXJfYmx1ZXByaW50KG1vZHVsZSkKKworICAgICAgICAjIE5vdyBhZGQgc3ViIG1v ZHVsZXMgb2YgdGFibGUgbm9kZSB0byBwYXJ0aXRpb24gdGFibGUgbm9kZS4KKyAgICAgICAgaWYg Zmlyc3RfcmVnaXN0cmF0aW9uOgorICAgICAgICAgICAgIyBFeGNsdWRlICdwYXJ0aXRpb24nIG1v ZHVsZSBmb3Igbm93IHRvIGF2b2lkIGN5Y2xpYyBpbXBvcnQgaXNzdWUuCisgICAgICAgICAgICBt b2R1bGVzX3RvX3NraXAgPSBbJ3BhcnRpdGlvbicsICdjb2x1bW4nXQorICAgICAgICAgICAgZm9y IHBhcmVudCBpbiBzZWxmLnBhcmVudG1vZHVsZXM6CisgICAgICAgICAgICAgICAgaWYgcGFyZW50 Lk5PREVfVFlQRSA9PSAndGFibGUnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN1Ym1vZHVs ZXMgKz0gWworICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlIGZvciBzdWJtb2R1bGUg aW4gcGFyZW50LnN1Ym1vZHVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN1Ym1vZHVs ZS5OT0RFX1RZUEUgbm90IGluIG1vZHVsZXNfdG9fc2tpcAorICAgICAgICAgICAgICAgICAgICBd CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbW9kdWxlX3VzZV90ZW1wbGF0ZV9qYXZhc2NyaXB0 KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyB3aGV0aGVyIEppbmphMiB0ZW1w bGF0ZSBpcyB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBqYXZhc2NyaXB0CisgICAgICAgIG1vZHVs ZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2JsdWVwcmludCA9IFBh cnRpdGlvbnNNb2R1bGUoX19uYW1lX18pCisKKworY2xhc3MgUGFydGl0aW9uc1ZpZXcoQmFzZVRh YmxlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKKyAgICAiIiIKKyAgICBU aGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHJvdXRlcyBmb3IgUGFydGl0 aW9uIG5vZGUKKworICAgIE1ldGhvZHM6CisgICAgLS0tLS0tLQorCisgICAgKiBsaXN0KCkKKyAg ICAgIC0gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGxpc3QgYWxsIHRoZSBQYXJ0aXRpb24gbm9k ZXMgd2l0aGluIHRoYXQKKyAgICAgIGNvbGxlY3Rpb24uCisKKyAgICAqIG5vZGVzKCkKKyAgICAg IC0gVGhpcyBmdW5jdGlvbiB3aWxsIHVzZWQgdG8gY3JlYXRlIGFsbCB0aGUgY2hpbGQgbm9kZSB3 aXRoaW4gdGhhdAorICAgICAgICBjb2xsZWN0aW9uLCBIZXJlIGl0IHdpbGwgY3JlYXRlIGFsbCB0 aGUgUGFydGl0aW9uIG5vZGUuCisKKyAgICAqIHByb3BlcnRpZXMoZ2lkLCBzaWQsIGRpZCwgc2Np ZCwgdGlkLCBwdGlkKQorICAgICAgLSBUaGlzIGZ1bmN0aW9uIHdpbGwgc2hvdyB0aGUgcHJvcGVy dGllcyBvZiB0aGUgc2VsZWN0ZWQgUGFydGl0aW9uIG5vZGUKKworICAgICIiIgorCisgICAgbm9k ZV90eXBlID0gYmx1ZXByaW50Lm5vZGVfdHlwZQorCisgICAgcGFyZW50X2lkcyA9IFsKKyAgICAg ICAgeyd0eXBlJzogJ2ludCcsICdpZCc6ICdnaWQnfSwKKyAgICAgICAgeyd0eXBlJzogJ2ludCcs ICdpZCc6ICdzaWQnfSwKKyAgICAgICAgeyd0eXBlJzogJ2ludCcsICdpZCc6ICdkaWQnfSwKKyAg ICAgICAgeyd0eXBlJzogJ2ludCcsICdpZCc6ICdzY2lkJ30sCisgICAgICAgIHsndHlwZSc6ICdp bnQnLCAnaWQnOiAndGlkJ30KKyAgICBdCisgICAgaWRzID0gWworICAgICAgICB7J3R5cGUnOiAn aW50JywgJ2lkJzogJ3B0aWQnfQorICAgIF0KKworICAgIG9wZXJhdGlvbnMgPSBkaWN0KHsKKyAg ICAgICAgJ29iaic6IFsKKyAgICAgICAgICAgIHsnZ2V0JzogJ3Byb3BlcnRpZXMnLCAnZGVsZXRl JzogJ2RlbGV0ZScsICdwdXQnOiAndXBkYXRlJ30sCisgICAgICAgICAgICB7J2dldCc6ICdsaXN0 JywgJ3Bvc3QnOiAnY3JlYXRlJ30KKyAgICAgICAgXSwKKyAgICAgICAgJ25vZGVzJzogW3snZ2V0 JzogJ25vZGVzJ30sIHsnZ2V0JzogJ25vZGVzJ31dLAorICAgICAgICAnY2hpbGRyZW4nOiBbeydn ZXQnOiAnY2hpbGRyZW4nfV0sCisgICAgICAgICdzcWwnOiBbeydnZXQnOiAnc3FsJ31dLAorICAg ICAgICAnbXNxbCc6IFt7J2dldCc6ICdtc3FsJ30sIHt9XSwKKyAgICAgICAgJ2RldGFjaCc6IFt7 J3B1dCc6ICdkZXRhY2gnfV0sCisgICAgICAgICd0cnVuY2F0ZSc6IFt7J3B1dCc6ICd0cnVuY2F0 ZSd9XQorCisgICAgfSkKKworICAgIGRlZiBjaGlsZHJlbihzZWxmLCAqKmt3YXJncyk6CisgICAg ICAgICIiIkJ1aWxkIGEgbGlzdCBvZiB0cmVldmlldyBub2RlcyBmcm9tIHRoZSBjaGlsZCBub2Rl cy4iIiIKKworICAgICAgICBpZiAnc2lkJyBub3QgaW4ga3dhcmdzOgorICAgICAgICAgICAgcmV0 dXJuIHByZWNvbmRpdGlvbl9yZXF1aXJlZCgKKyAgICAgICAgICAgICAgICBnZXR0ZXh0KCdSZXF1 aXJlZCBwcm9wZXJ0aWVzIGFyZSBtaXNzaW5nLicpCisgICAgICAgICAgICApCisKKyAgICAgICAg ZnJvbSBwZ2FkbWluLnV0aWxzLmRyaXZlciBpbXBvcnQgZ2V0X2RyaXZlcgorICAgICAgICBtYW5h Z2VyID0gZ2V0X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikuY29ubmVjdGlvbl9tYW5hZ2VyKAor ICAgICAgICAgICAgc2lkPWt3YXJnc1snc2lkJ10KKyAgICAgICAgKQorCisgICAgICAgIGRpZCA9 IE5vbmUKKyAgICAgICAgaWYgJ2RpZCcgaW4ga3dhcmdzOgorICAgICAgICAgICAgZGlkID0ga3dh cmdzWydkaWQnXQorCisgICAgICAgIGNvbm4gPSBtYW5hZ2VyLmNvbm5lY3Rpb24oZGlkPWRpZCkK KworICAgICAgICBpZiBub3QgY29ubi5jb25uZWN0ZWQoKToKKyAgICAgICAgICAgIHJldHVybiBw cmVjb25kaXRpb25fcmVxdWlyZWQoCisgICAgICAgICAgICAgICAgZ2V0dGV4dCgKKyAgICAgICAg ICAgICAgICAgICAgIkNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciBoYXMgYmVlbiBsb3N0LiIKKyAg ICAgICAgICAgICAgICApCisgICAgICAgICAgICApCisKKyAgICAgICAgbm9kZXMgPSBbXQorICAg ICAgICBmb3IgbW9kdWxlIGluIHNlbGYuYmx1ZXByaW50LnN1Ym1vZHVsZXM6CisgICAgICAgICAg ICBpZiBpc2luc3RhbmNlKG1vZHVsZSwgUEdDaGlsZE1vZHVsZSk6CisgICAgICAgICAgICAgICAg aWYgbWFuYWdlciBpcyBub3QgTm9uZSBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgbW9k dWxlLkJhY2tlbmRTdXBwb3J0ZWQobWFuYWdlciwgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAg ICAgICAjIHRyZWF0IHBhcnRpdGlvbiB0YWJsZSBhcyBub3JtYWwgdGFibGUuCisgICAgICAgICAg ICAgICAgICAgICMgcmVwbGFjZSB0aWQgd2l0aCBwdGlkIGFuZCBwb3AgcHRpZCBmcm9tIGt3YXJn cworICAgICAgICAgICAgICAgICAgICBpZiAncHRpZCcgaW4ga3dhcmdzOgorICAgICAgICAgICAg ICAgICAgICAgICAgcHRpZCA9IGt3YXJncy5wb3AoJ3B0aWQnKQorICAgICAgICAgICAgICAgICAg ICAgICAga3dhcmdzWyd0aWQnXSA9IHB0aWQKKyAgICAgICAgICAgICAgICAgICAgbm9kZXMuZXh0 ZW5kKG1vZHVsZS5nZXRfbm9kZXMoKiprd2FyZ3MpKQorICAgICAgICAgICAgZWxzZToKKyAgICAg ICAgICAgICAgICBub2Rlcy5leHRlbmQobW9kdWxlLmdldF9ub2RlcygqKmt3YXJncykpCisKKyAg ICAgICAgIyBFeHBsaWNpdGx5IGluY2x1ZGUgJ3BhcnRpdGlvbicgbW9kdWxlIGFzIHdlIGhhZCBl eGNsdWRlZCBpdCBkdXJpbmcKKyAgICAgICAgIyByZWdpc3RyYXRpb24uCisgICAgICAgIG5vZGVz LmV4dGVuZChzZWxmLmJsdWVwcmludC5nZXRfbm9kZXMoKiprd2FyZ3MpKQorCisgICAgICAgICMg UmV0dXJuIHNvcnRlZCBub2RlcyBiYXNlZCBvbiBsYWJlbAorICAgICAgICByZXR1cm4gbWFrZV9q c29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgZGF0YT1zb3J0ZWQoCisgICAgICAgICAgICAgICAg bm9kZXMsIGtleT1sYW1iZGEgYzogY1snbGFiZWwnXQorICAgICAgICAgICAgKQorICAgICAgICAp CisKKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KKyAgICBkZWYgbGlzdChz ZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhp cyBmdW5jdGlvbiBpcyB1c2VkIHRvIGxpc3QgYWxsIHRoZSB0YWJsZSBub2RlcyB3aXRoaW4gdGhh dAorICAgICAgICBjb2xsZWN0aW9uLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBnaWQ6 IFNlcnZlciBncm91cCBJRAorICAgICAgICAgICAgc2lkOiBTZXJ2ZXIgSUQKKyAgICAgICAgICAg IGRpZDogRGF0YWJhc2UgSUQKKyAgICAgICAgICAgIHNjaWQ6IFNjaGVtYSBJRAorICAgICAgICAg ICAgdGlkOiBUYWJsZSBJRAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBKU09OIG9m IGF2YWlsYWJsZSB0YWJsZSBub2RlcworICAgICAgICAiIiIKKyAgICAgICAgU1FMID0gcmVuZGVy X3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnBhcnRpdGlvbl90ZW1wbGF0ZV9wYXRoLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0 c3lzb2lkKQorICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FM KQorCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxf c2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKyAgICAgICAgcmV0dXJuIGFqYXhfcmVzcG9uc2Uo CisgICAgICAgICAgICByZXNwb25zZT1yZXNbJ3Jvd3MnXSwKKyAgICAgICAgICAgIHN0YXR1cz0y MDAKKyAgICAgICAgKQorCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCisg ICAgZGVmIG5vZGVzKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCwgcHRpZD1Ob25lKToK KyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBsaXN0IGFsbCB0 aGUgdGFibGUgbm9kZXMgd2l0aGluIHRoYXQKKyAgICAgICAgY29sbGVjdGlvbi4KKworICAgICAg ICBBcmdzOgorICAgICAgICAgICAgZ2lkOiBTZXJ2ZXIgZ3JvdXAgSUQKKyAgICAgICAgICAgIHNp ZDogU2VydmVyIElECisgICAgICAgICAgICBkaWQ6IERhdGFiYXNlIElECisgICAgICAgICAgICBz Y2lkOiBTY2hlbWEgSUQKKyAgICAgICAgICAgIHRpZDogUGFyZW50IFRhYmxlIElECisgICAgICAg ICAgICBwdGlkOiBQYXJ0aXRpb24gVGFibGUgSUQKKworICAgICAgICBSZXR1cm5zOgorICAgICAg ICAgICAgSlNPTiBvZiBhdmFpbGFibGUgdGFibGUgbm9kZXMKKyAgICAgICAgIiIiCisgICAgICAg IFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5w YXJ0aXRpb25fdGVtcGxhdGVfcGF0aCwgJ25vZGVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICBz Y2lkPXNjaWQsIHRpZD10aWQKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHN0YXR1cywgcnNl dCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQorICAgICAgICBpZiBub3Qgc3RhdHVz OgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0 KQorCisgICAgICAgIGRlZiBicm93c2VyX25vZGUocm93KToKKyAgICAgICAgICAgIHJldHVybiBz ZWxmLmJsdWVwcmludC5nZW5lcmF0ZV9icm93c2VyX25vZGUoCisgICAgICAgICAgICAgICAgcm93 WydvaWQnXSwKKyAgICAgICAgICAgICAgICB0aWQsCisgICAgICAgICAgICAgICAgcm93WyduYW1l J10sCisgICAgICAgICAgICAgICAgaWNvbj0iaWNvbi1wYXJ0aXRpb24iLAorICAgICAgICAgICAg ICAgIHRpZ2dlcl9jb3VudD1yb3dbJ3RyaWdnZXJjb3VudCddLAorICAgICAgICAgICAgICAgIGhh c19lbmFibGVfdHJpZ2dlcnM9cm93WydoYXNfZW5hYmxlX3RyaWdnZXJzJ10sCisgICAgICAgICAg ICAgICAgaXNfcGFydGl0aW9uZWQ9cm93Wydpc19wYXJ0aXRpb25lZCddLAorICAgICAgICAgICAg ICAgIHBhcmVudF9zY2hlbWFfaWQ9c2NpZCwKKyAgICAgICAgICAgICAgICBzY2hlbWFfaWQ9cm93 WydzY2hlbWFfaWQnXSwKKyAgICAgICAgICAgICAgICBzY2hlbWFfbmFtZT1yb3dbJ3NjaGVtYV9u YW1lJ10KKyAgICAgICAgICAgICkKKworICAgICAgICBpZiBwdGlkIGlzIG5vdCBOb25lOgorICAg ICAgICAgICAgaWYgbGVuKHJzZXRbJ3Jvd3MnXSkgPT0gMDoKKyAgICAgICAgICAgICAgICByZXR1 cm4gZ29uZShnZXR0ZXh0KAorICAgICAgICAgICAgICAgICAgICAiVGhlIHNwZWNpZmllZCBwYXJ0 aXRpb25lZCB0YWJsZSBjb3VsZCBub3QgYmUgZm91bmQuIgorICAgICAgICAgICAgICAgICkpCisK KyAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICAgICAg ZGF0YT1icm93c2VyX25vZGUocnNldFsncm93cyddWzBdKSwgc3RhdHVzPTIwMAorICAgICAgICAg ICAgICAgICkKKworICAgICAgICByZXMgPSBbXQorICAgICAgICBmb3Igcm93IGluIHJzZXRbJ3Jv d3MnXToKKyAgICAgICAgICAgIHJlcy5hcHBlbmQoYnJvd3Nlcl9ub2RlKHJvdykpCisKKyAgICAg ICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAgICAgICAgIGRhdGE9cmVzLAorICAg ICAgICAgICAgc3RhdHVzPTIwMAorICAgICAgICApCisKKyAgICBAQmFzZVRhYmxlVmlldy5jaGVj a19wcmVjb25kaXRpb24KKyAgICBkZWYgcHJvcGVydGllcyhzZWxmLCBnaWQsIHNpZCwgZGlkLCBz Y2lkLCB0aWQsIHB0aWQpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxs IHNob3cgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdGVkIHRhYmxlIG5vZGUuCisKKyAgICAg ICAgQXJnczoKKyAgICAgICAgICAgIGdpZDogU2VydmVyIEdyb3VwIElECisgICAgICAgICAgICBz aWQ6IFNlcnZlciBJRAorICAgICAgICAgICAgZGlkOiAgRGF0YWJhc2UgSUQKKyAgICAgICAgICAg IHNjaWQ6IFNjaGVtYSBJRAorICAgICAgICAgICAgc2NpZDogU2NoZW1hIElECisgICAgICAgICAg ICB0aWQ6IFRhYmxlIElECisgICAgICAgICAgICBwdGlkOiBQYXJ0aXRpb24gVGFibGUgSUQKKwor ICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgSlNPTiBvZiBzZWxlY3RlZCB0YWJsZSBub2Rl CisgICAgICAgICIiIgorCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihb c2VsZi5wYXJ0aXRpb25fdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkaWQ9ZGlkLCBzY2lkPXNjaWQsIHRpZD10aWQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwdGlkPXB0aWQsIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkKQor ICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQorICAgICAg ICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgaWYgbGVuKHJlc1sncm93cyddKSA9PSAwOgorICAg ICAgICAgICAgICAgIHJldHVybiBnb25lKGdldHRleHQoCisgICAgICAgICAgICAgICAgICAgICJU aGUgc3BlY2lmaWVkIHBhcnRpdGlvbmVkIHRhYmxlIGNvdWxkIG5vdCBiZSBmb3VuZC4iKSkKKwor ICAgICAgICByZXR1cm4gc3VwZXIoUGFydGl0aW9uc1ZpZXcsIHNlbGYpLnByb3BlcnRpZXMoCisg ICAgICAgICAgICBnaWQsIHNpZCwgZGlkLCBzY2lkLCBwdGlkLCByZXMpCisKKyAgICBAQmFzZVRh YmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KKyAgICBkZWYgc3FsKHNlbGYsIGdpZCwgc2lkLCBk aWQsIHNjaWQsIHRpZCwgcHRpZCk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9u IHdpbGwgY3JlYXRlcyByZXZlcnNlIGVuZ2luZWVyZWQgc3FsIGZvcgorICAgICAgICB0aGUgdGFi bGUgb2JqZWN0CisKKyAgICAgICAgIEFyZ3M6CisgICAgICAgICAgIGdpZDogU2VydmVyIEdyb3Vw IElECisgICAgICAgICAgIHNpZDogU2VydmVyIElECisgICAgICAgICAgIGRpZDogRGF0YWJhc2Ug SUQKKyAgICAgICAgICAgc2NpZDogU2NoZW1hIElECisgICAgICAgICAgIHRpZDogVGFibGUgSUQK KyAgICAgICAgICAgcHRpZDogUGFydGl0aW9uIFRhYmxlIElECisgICAgICAgICIiIgorICAgICAg ICBtYWluX3NxbCA9IFtdCisKKyAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2lu KFtzZWxmLnBhcnRpdGlvbl90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHB0aWQ9cHRpZCwgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQp CisgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCisgICAg ICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXJlcykKKworICAgICAgICBpZiBsZW4ocmVzWydyb3dzJ10pID09IDA6Cisg ICAgICAgICAgICAgICAgcmV0dXJuIGdvbmUoZ2V0dGV4dCgKKyAgICAgICAgICAgICAgICAgICAg IlRoZSBzcGVjaWZpZWQgcGFydGl0aW9uZWQgdGFibGUgY291bGQgbm90IGJlIGZvdW5kLiIpKQor CisgICAgICAgIGRhdGEgPSByZXNbJ3Jvd3MnXVswXQorCisgICAgICAgIHJldHVybiBCYXNlVGFi bGVWaWV3LmdldF9yZXZlcnNlX2VuZ2luZWVyZWRfc3FsKHNlbGYsIGRpZCwgc2NpZCwgcHRpZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWFpbl9zcWwsIGRhdGEpCisKKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24K KyAgICBkZWYgZGV0YWNoKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCwgcHRpZCk6Cisg ICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVzZXQgc3RhdGlzdGljcyBv ZiB0YWJsZQorCisgICAgICAgICBBcmdzOgorICAgICAgICAgICBnaWQ6IFNlcnZlciBHcm91cCBJ RAorICAgICAgICAgICBzaWQ6IFNlcnZlciBJRAorICAgICAgICAgICBkaWQ6IERhdGFiYXNlIElE CisgICAgICAgICAgIHNjaWQ6IFNjaGVtYSBJRAorICAgICAgICAgICB0aWQ6IFRhYmxlIElECisg ICAgICAgICAgIHB0aWQ6IFBhcnRpdGlvbiBUYWJsZSBJRAorICAgICAgICAiIiIKKyAgICAgICAg IyBGZXRjaCBzY2hlbWEgbmFtZQorICAgICAgICBzdGF0dXMsIHBhcmVudF9zY2hlbWEgPSBzZWxm LmNvbm4uZXhlY3V0ZV9zY2FsYXIoCisgICAgICAgICAgICByZW5kZXJfdGVtcGxhdGUoCisgICAg ICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ2dldF9zY2hl bWEuc3FsJ10pLAorICAgICAgICAgICAgICAgIGNvbm49c2VsZi5jb25uLCBzY2lkPXNjaWQKKyAg ICAgICAgICAgICkKKyAgICAgICAgKQorICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAg ICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1wYXJlbnRfc2NoZW1hKQor CisgICAgICAgICMgRmV0Y2ggUGFyZW50IFRhYmxlIG5hbWUKKyAgICAgICAgc3RhdHVzLCBwYXJ0 aXRpb25lZF90YWJsZV9uYW1lID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKAorICAgICAgICAg ICAgcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxl X3RlbXBsYXRlX3BhdGgsICdnZXRfdGFibGUuc3FsJ10pLAorICAgICAgICAgICAgICAgIGNvbm49 c2VsZi5jb25uLCBzY2lkPXNjaWQsIHRpZD10aWQKKyAgICAgICAgICAgICkKKyAgICAgICAgKQor ICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz1wYXJ0aXRpb25lZF90YWJsZV9uYW1lKQorCisgICAgICAgICMgR2V0 IHNjaGVtYSBvaWQgb2YgcGFydGl0aW9uCisgICAgICAgIHN0YXR1cywgcHNjaWQgPSBzZWxmLmNv bm4uZXhlY3V0ZV9zY2FsYXIoCisgICAgICAgICAgICByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4o W3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ2dldF9zY2hlbWFfb2lkLnNxbCddKSwgdGlkPXB0aWQpKQorICAgICAgICBpZiBu b3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJv cm1zZz1zY2lkKQorCisgICAgICAgICMgRmV0Y2ggc2NoZW1hIG5hbWUKKyAgICAgICAgc3RhdHVz LCBwYXJ0aXRpb25fc2NoZW1hID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKAorICAgICAgICAg ICAgcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfc2NoZW1hLnNxbCddKSwg Y29ubj1zZWxmLmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NpZD1wc2NpZCkK KyAgICAgICAgKQorICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGlu dGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1wYXJ0aXRpb25fc2NoZW1hKQorCisgICAgICAg ICMgRmV0Y2ggUGFydGl0aW9uIFRhYmxlIG5hbWUKKyAgICAgICAgc3RhdHVzLCBwYXJ0aXRpb25f bmFtZSA9IHNlbGYuY29ubi5leGVjdXRlX3NjYWxhcigKKyAgICAgICAgICAgIHJlbmRlcl90ZW1w bGF0ZSgKKyAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRo LCAnZ2V0X3RhYmxlLnNxbCddKSwKKyAgICAgICAgICAgICAgICBjb25uPXNlbGYuY29ubiwgc2Np ZD1wc2NpZCwgdGlkPXB0aWQKKyAgICAgICAgICAgICkKKyAgICAgICAgKQorICAgICAgICBpZiBu b3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJv cm1zZz1wYXJ0aXRpb25fbmFtZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZW1wX2Rh dGEgPSBkaWN0KCkKKyAgICAgICAgICAgIHRlbXBfZGF0YVsncGFyZW50X3NjaGVtYSddID0gcGFy ZW50X3NjaGVtYQorICAgICAgICAgICAgdGVtcF9kYXRhWydwYXJ0aXRpb25lZF90YWJsZV9uYW1l J10gPSBwYXJ0aXRpb25lZF90YWJsZV9uYW1lCisgICAgICAgICAgICB0ZW1wX2RhdGFbJ3NjaGVt YSddID0gcGFydGl0aW9uX3NjaGVtYQorICAgICAgICAgICAgdGVtcF9kYXRhWyduYW1lJ10gPSBw YXJ0aXRpb25fbmFtZQorCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpv aW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYucGFydGl0aW9uX3RlbXBsYXRl X3BhdGgsICdkZXRhY2guc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9 dGVtcF9kYXRhLCBjb25uPXNlbGYuY29ubikKKworICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBz ZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoU1FMKQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoK KyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJl cykKKworICAgICAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAgICAgICAg ICAgICBzdWNjZXNzPTEsCisgICAgICAgICAgICAgICAgaW5mbz1nZXR0ZXh0KCJQYXJ0aXRpb24g ZGV0YWNoZWQuIiksCisgICAgICAgICAgICAgICAgZGF0YT17CisgICAgICAgICAgICAgICAgICAg ICdpZCc6IHB0aWQsCisgICAgICAgICAgICAgICAgICAgICdzY2lkJzogc2NpZAorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgor ICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1zdHIoZSkp CisKKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KKyAgICBkZWYgbXNxbChz ZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQsIHB0aWQ9Tm9uZSk6CisgICAgICAgICIiIgor ICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIG1vZGlmaWVkIHNxbCBmb3IgdGFibGUg b2JqZWN0CisKKyAgICAgICAgIEFyZ3M6CisgICAgICAgICAgIGdpZDogU2VydmVyIEdyb3VwIElE CisgICAgICAgICAgIHNpZDogU2VydmVyIElECisgICAgICAgICAgIGRpZDogRGF0YWJhc2UgSUQK KyAgICAgICAgICAgc2NpZDogU2NoZW1hIElECisgICAgICAgICAgIHRpZDogVGFibGUgSUQKKyAg ICAgICAgIiIiCisgICAgICAgIGRhdGEgPSBkaWN0KCkKKyAgICAgICAgZm9yIGssIHYgaW4gcmVx dWVzdC5hcmdzLml0ZW1zKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGF0 YVtrXSA9IGpzb24ubG9hZHModiwgZW5jb2Rpbmc9J3V0Zi04JykKKyAgICAgICAgICAgIGV4Y2Vw dCAoVmFsdWVFcnJvciwgVHlwZUVycm9yLCBLZXlFcnJvcik6CisgICAgICAgICAgICAgICAgZGF0 YVtrXSA9IHYKKworICAgICAgICBpZiBwdGlkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgU1FM ID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnBhcnRpdGlvbl90ZW1wbGF0ZV9wYXRo LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGll cy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRpZCwgc2Np ZD1zY2lkLCB0aWQ9dGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aWQ9 cHRpZCwgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCisgICAgICAgICAgICBzdGF0 dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQorICAgICAgICAgICAgaWYgbm90 IHN0YXR1czoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVy cm9ybXNnPXJlcykKKworICAgICAgICBTUUwsIG5hbWUgPSBzZWxmLmdldF9zcWwoZGlkLCBzY2lk LCBwdGlkLCBkYXRhLCByZXMpCisgICAgICAgIFNRTCA9IHJlLnN1YignXG57Mix9JywgJ1xuXG4n LCBTUUwpCisgICAgICAgIFNRTCA9IFNRTC5zdHJpcCgnXG4nKQorICAgICAgICBpZiBTUUwgPT0g Jyc6CisgICAgICAgICAgICBTUUwgPSAiLS1tb2RpZmllZCBTUUwiCisgICAgICAgIHJldHVybiBt YWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICBkYXRhPVNRTCwKKyAgICAgICAgICAgIHN0 YXR1cz0yMDAKKyAgICAgICAgKQorCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0 aW9uCisgICAgZGVmIHVwZGF0ZShzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQsIHB0aWQp OgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHVwZGF0ZSBhbiBleGlz dGluZyB0YWJsZSBvYmplY3QKKworICAgICAgICAgQXJnczoKKyAgICAgICAgICAgZ2lkOiBTZXJ2 ZXIgR3JvdXAgSUQKKyAgICAgICAgICAgc2lkOiBTZXJ2ZXIgSUQKKyAgICAgICAgICAgZGlkOiBE YXRhYmFzZSBJRAorICAgICAgICAgICBzY2lkOiBTY2hlbWEgSUQKKyAgICAgICAgICAgdGlkOiBU YWJsZSBJRAorICAgICAgICAgICBwdGlkOiBQYXJ0aXRpb24gVGFibGUgSUQKKyAgICAgICAgIiIi CisgICAgICAgIGRhdGEgPSByZXF1ZXN0LmZvcm0gaWYgcmVxdWVzdC5mb3JtIGVsc2UganNvbi5s b2FkcygKKyAgICAgICAgICAgIHJlcXVlc3QuZGF0YSwgZW5jb2Rpbmc9J3V0Zi04JworICAgICAg ICApCisKKyAgICAgICAgZm9yIGssIHYgaW4gZGF0YS5pdGVtcygpOgorICAgICAgICAgICAgdHJ5 OgorICAgICAgICAgICAgICAgIGRhdGFba10gPSBqc29uLmxvYWRzKHYsIGVuY29kaW5nPSd1dGYt OCcpCisgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIFR5cGVFcnJvciwgS2V5RXJyb3Ip OgorICAgICAgICAgICAgICAgIGRhdGFba10gPSB2CisKKyAgICAgICAgdHJ5OgorICAgICAgICAg ICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnBhcnRpdGlvbl90ZW1wbGF0 ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJv cGVydGllcy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRp ZCwgc2NpZD1zY2lkLCB0aWQ9dGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHB0aWQ9cHRpZCwgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCisgICAgICAgICAg ICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQorICAgICAgICAgICAg aWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXJlcykKKworICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFBhcnRpdGlvbnNW aWV3LCBzZWxmKS51cGRhdGUoCisgICAgICAgICAgICAgICAgZ2lkLCBzaWQsIGRpZCwgc2NpZCwg cHRpZCwgZGF0YSwgcmVzLCBwYXJlbnRfaWQ9dGlkKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9u IGFzIGU6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXN0cihlKSkKKworICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgorICAgIGRl ZiB0cnVuY2F0ZShzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQsIHB0aWQpOgorICAgICAg ICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHRydW5jYXRlIHRoZSB0YWJsZSBvYmpl Y3QKKworICAgICAgICAgQXJnczoKKyAgICAgICAgICAgZ2lkOiBTZXJ2ZXIgR3JvdXAgSUQKKyAg ICAgICAgICAgc2lkOiBTZXJ2ZXIgSUQKKyAgICAgICAgICAgZGlkOiBEYXRhYmFzZSBJRAorICAg ICAgICAgICBzY2lkOiBTY2hlbWEgSUQKKyAgICAgICAgICAgdGlkOiBUYWJsZSBJRAorICAgICAg ICAiIiIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUo Ii8iLmpvaW4oW3NlbGYucGFydGl0aW9uX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkaWQ9ZGlkLCBzY2lkPXNjaWQsIHRpZD10aWQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRpZD1wdGlkLCBkYXRsYXN0c3lzb2lk PXNlbGYuZGF0bGFzdHN5c29pZCkKKyAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25u LmV4ZWN1dGVfZGljdChTUUwpCisgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorCisgICAg ICAgICAgICByZXR1cm4gc3VwZXIoUGFydGl0aW9uc1ZpZXcsIHNlbGYpLnRydW5jYXRlKGdpZCwg c2lkLCBkaWQsIHNjaWQsIHB0aWQsIHJlcykKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFz IGU6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0 cihlKSkKKworCitQYXJ0aXRpb25zVmlldy5yZWdpc3Rlcl9ub2RlX3ZpZXcoYmx1ZXByaW50KQpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvdGFibGVzL3BhcnRpdGlvbnMvc3RhdGljL2ltZy9jb2xsLXBhcnRpdGlv bi5wbmcgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFz ZXMvc2NoZW1hcy90YWJsZXMvcGFydGl0aW9ucy9zdGF0aWMvaW1nL2NvbGwtcGFydGl0aW9uLnBu ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi44NTM2YzY2YWZiMTA5OWUxODk4ZjNjNjE2M2E3MDllM2U1Mzc1NTY0CkdJ VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxNDMzCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeMHdC ITYxfDtQX3w0IyVga3xuTVlDQmdZPUNGT31sc1NKKU9gQU1rPwp6cDFGelhzWD9pVURWMnBNUSo5 VSttQDZfdkIxJDVCZVhOcjZiTStFSVlWO357M3hLKkE3O05rLTNLRW1FUSVlKyoKelFxd2NAWT9h PmMtbWojUG5QUklIWnQ4MmBUaX4zVWs/QiFZbHAwKis3bXszK29vdHorV04pV25RKCotKEFVQ3hu CnpRSzJGP0MkSEc1IWQzfXZ0YCgzQzY0cUJ6MDRwaVV3cEReU0QjQUJGITh5TXVSbCF1eE9nR3Vr KmgwYkZRcVIhVAp6KCEkNkBONVJPeiZgalVKUXMyLS0qVEIlcXp8elhWUHlxXipmVkxILXEqKD5J eEl5ZyNAQCRuZE49Z2M+XiEzWmoKeiVrfDJRXzQxMy1eJGpnOEUlZ25JXm9AKmtmaHUmMUVBdlZj RHxHWFVtMD4yaHEhdVJeV2ZxaVY9STFHWk9pV0Q1CnpGRDxjRTA9Zzk5aDE+I1BVJTBffSNuNkJQ MkFPX0VWdThNKW9gSFVERjM0WUMpeHstMnNSKENhUmIzb1hTJip0OQp6bHY8byRUOWdjb2syR2JO Vz88T2l3K04mVj1vJX5rcUQpfDxCPDhyfUN6c30/PTlQSDUqZVVeS15pbmNZdGtUUloKejV7Km9h bDVgRD9PYnZCU09jTzExbFlsX2lKa2BYKUZ2WSttKWcmbm1XKTMjfUUqNmReUE50NGRDTjdSSGhL OD1ACnpQSHZ7b0YzeUhWbVg1fSpaak1ke0Z1azY2I1UrVigkKkN+QUdsNnpQXipaOSFZdm8qJm5w bCF3NnEyOHgxNHsofgp6OFRscG8jVG9lcDNlTGA7U1R8U0RASiZxNCVtV0UoZis3bXlaPG99ZiUo QiFKeDEjKTkxI24xUFdueXVLc2ZEU2oKek1UJWlFKDk2a2J4K2FPcTJEK0IhQ2FKb3s3RCsmPFJM Y318bFZsflJ7dUZYVVAjQD9oZU5ie2lOPEpfbFY0NEltCno7aDYhKmZvR0BHSllYSXcwJW4lcUQt UzYlRmZlWlNiYTQhK3hIVl9lZEY+V1FpUjFmPy0keThWMjZjQm87dWtwVwp6PStSWUdLN0ctZ3ps P2woZTRGYWw9RSVxX25LTVZtTU5gdjB0TjdORjF1OHw4cEQ2S2RkN0dNaFpRdFhXbUV7e0gKemp+ TSVZdTNoJUxAfHAyQHAzaU9IJU9ee1VgQipuaFFKOEVaKGFSdEVaZXNRSztEMiF2Sn1hS01kfWxr clpUUVFnCnpgez0zNjFDdTBiMUZHZ15hWkdWI1p+QWQ4O15MNztwSWZzWFVRNFo+VyY2WEpIQHdt SzxBJDsjNlZHYnQhQDlmYAp6ZH5YITRQUU0pT0BwRjVyJnBsQ3p0Nk9KaFomfmNldyl9SGNfKVYq ZVl0bnZnSGhDVSNAUFQjanFIYEF1VEdiUnsKelB0OyMxbjBqa2wlP3E8NUYzRSk9KWpFNSU7PEYj VlRQPE4yUmBCV0AyamgmNDlqWENZT0FXOzV2biohdkkpQXpECnoqMjJlNlJEVEBtX0Z3aCMrZlZK QHlIOHZqQ3BXJFFlQ1U0NitnRVMpYnFRKXxucTY4dip+aTRrPmNOJk1CailiNQp6KXZeeyhVZTlu a2N6PEtEJTlwNygoeHIwVXVlPDNVY15rUFRue31iZmprY04zKHVNdUE3aml+alpSdmI9b3ZFXn4K enZDWCpjQG4tMlF6aEF2QClqOHN+PyF3S1d7eDdTV2A8NzxaRiQkbWNfeCpDQUp8U3E5cipAbENA JXBYMzNycE5zCnFnVG9gZyZBbkBXP2Y7U3xAMDMyTjliaG9aX195ckhrQUBBUCFxVV4jJnQ7dWNM SzZWTmNAcjRgCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1p bi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMv cGFydGl0aW9ucy9zdGF0aWMvaW1nL3BhcnRpdGlvbi5wbmcgYi93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcGFydGl0aW9u cy9zdGF0aWMvaW1nL3BhcnRpdGlvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQ2ZGQ4YjM1YWQyZGExYzE1 MGRjZmU1YmU4ODYxYzczY2VmNzJlNgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTI2NAp6Y21l QVNATj8ob2xIeWB1VkJxIWlhMHZwXjB3QiE2MXw7UF98NCMlYGt8bk1ZQ0JnWT1DRk99bHNTSilP YEFNaz8KenAxRnpYc1g/aVVEVjJwTVEqOVUrbV5DcyhCMSQ1QmVYTnI2Yk0rRUlZVjt+ezN4SypB NztOay0zS0VtRVElZSsqCnpRcXdjQFk/YT5jLW1qI1BuUFJJSFp0ODJgVGl+M1VrP0IhWWxwMCor N217Mytvb3R6K1dOKVduUSgqLShBVUN4bgp6UUsyRj9DJEhHNSFkM312dGAoM0M2NHFCejA0cGlV d3BEXlNEI0FCRiE4eU11UmwhdXhPZ0d1aypoMGJGUXFSIVQKeighJDZATjVST3omYGpVSlFzMi0t KlRCJXF6fHpYVlB5cV4qZlZMSC1xKig+SXhJeWcjQEAkbmROPWdjPl4hM1pqCnola3wyUV80MTMt XiRqZzhFJWduSV5vQCprZmh1JjFFQXZWY0R8R1hVbTA+MmhxIXVSXldmcWlWPUkxR1pPaVdENQp6 RkQ8Y0UwPWc5OWgxPiRUdjNiU05VOytsMWVubnp8ek0tQjAkVilKVnpQfFhDPUh8ang3bmNPM0JI V0FCO05wPFYKemY+aXlXKVorWm9xR1Z2aXI3NDR+RHpJYGNOPSs9dUZBQi1lJncrKHZLdF9IXmVz TTtBZnI3SSREQWRkcUc8Kn0yCnpHeEk9I25xWGJOekUrLWojVStWKCQqRzwkd257KkFeZkVKM3RT c0ZPLUhlPmZFbG4ocTRHaiVsJWBJS2JvdCNYYQp6T3grQlBVN1hDIysrY2NMQHs+eipRfWFxLWRR JVgzOWRZVWZDNVlTdHB2XjkrTVZWIShEUS1waXhlOCM5VFY+KlEKemkjYm03cG42a3F5VHQ7aFVW V2ZyXmcrPiE2eH1jKFU+WDgzO2ZXVz5maFlnZUpZYnFIMHcoU14zb35qTTcjUU9gCnpUXnZJeVpt a0tuXj4jS0N1e0hOeHtYJjdPPjRET1ZNX083SThjSERvUnpJMmxhTypXKTs4VktOZkFDPWFMO2Vr MQp6Y1NXcHJ1M1d1KF41cEotVFRpTWNlYjNeNGJTZUdOVVh8eH1pemlqVD8+O200LXJjJiZtMVdF VkJBRmhhUEhEYmEKejtUWSszPXZQSUl0OXxVWFchK0VDcFc7bjgpXlU3LVVaMzUkTGVweGRoXztf U1coVHJrcm10OCRCa09IPXRjXyV3Cno8RnlvfkV1RVhyZXA5UEd2d3JJMUtFcGtzQXt7WjM+K2lx KmMrOUEkXm9uM2EtMVd7eSFhNk83Vzw5QHB5anRzbgp6MiMzZ3lqUXd1NU5BS09MUUlaellkSGU3 c3VsNEZ+ayp5cn0od1F2ZEJJQkV1WERvPV83WEtoQUZoKnhPbzVaVDwKelJucVUpUno+KSZSfXtA X0RFMWU9K1ZZJlUmbn17UW5WMyszP3ZlbGZCM1ZhKzNNVCVvKnp0UkhAOWc/NWgxRHkxCnpxcHo/ MTUtKnllZUNnb2c9bDwpb1ooZSpJdjU5Rz5XcmolPXhBeGF7e1B5UX11OXYoMnJsNTd7YD1YanBl fUJHLQpiWmVWMEVkQjYxNHMoalRwUCNOVXU+Z1RlfkRXTTRmMjJhSiUKCmxpdGVyYWwgMApIY21W P2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9z ZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9wYXJ0aXRpb25zL3N0YXRpYy9qcy9wYXJ0 aXRpb24uanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRh YmFzZXMvc2NoZW1hcy90YWJsZXMvcGFydGl0aW9ucy9zdGF0aWMvanMvcGFydGl0aW9uLmpzCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYWRiNWUKLS0tIC9kZXYvbnVsbAor KysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv c2NoZW1hcy90YWJsZXMvcGFydGl0aW9ucy9zdGF0aWMvanMvcGFydGl0aW9uLmpzCkBAIC0wLDAg KzEsMTI3NiBAQAorZGVmaW5lKFsKKyAgJ3NvdXJjZXMvZ2V0dGV4dCcsICdzb3VyY2VzL3VybF9m b3InLCAnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLAorICAndW5kZXJzY29yZS5zdHJpbmcnLCAncGdh ZG1pbicsICdwZ2FkbWluLmJyb3dzZXInLCAnYmFja2Zvcm0nLCAnYWxlcnRpZnknLAorICAncGdh ZG1pbi5icm93c2VyLmNvbGxlY3Rpb24nLCAncGdhZG1pbi5icm93c2VyLnRhYmxlLnBhcnRpdGlv bi51dGlscycKK10sCitmdW5jdGlvbihnZXR0ZXh0LCB1cmxfZm9yLCAkLCBfLCBTLCBwZ0FkbWlu LCBwZ0Jyb3dzZXIsIEJhY2tmb3JtLCBhbGVydGlmeSkgeworCisgIGlmICghcGdCcm93c2VyLk5v ZGVzWydjb2xsLXBhcnRpdGlvbiddKSB7CisgICAgdmFyIGRhdGFiYXNlcyA9IHBnQWRtaW4uQnJv d3Nlci5Ob2Rlc1snY29sbC1wYXJ0aXRpb24nXSA9CisgICAgICBwZ0FkbWluLkJyb3dzZXIuQ29s bGVjdGlvbi5leHRlbmQoeworICAgICAgICBub2RlOiAncGFydGl0aW9uJywKKyAgICAgICAgbGFi ZWw6IGdldHRleHQoJ1BhcnRpdGlvbnMnKSwKKyAgICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6 IHBnQnJvd3Nlci50YWJsZUNoaWxkVHJlZU5vZGVIaWVyYXJjaHksCisgICAgICAgIHR5cGU6ICdj b2xsLXBhcnRpdGlvbicsCisgICAgICAgIGNvbHVtbnM6IFsKKyAgICAgICAgICAnbmFtZScsICdz Y2hlbWEnLCAncGFydGl0aW9uX3ZhbHVlJywgJ2lzX3BhcnRpdGlvbmVkJywgJ2Rlc2NyaXB0aW9u JworICAgICAgICBdLAorICAgICAgICBoYXNTdGF0aXN0aWNzOiB0cnVlCisgICAgICB9KTsKKyAg fTsKKworICBpZiAoIXBnQnJvd3Nlci5Ob2Rlc1sncGFydGl0aW9uJ10pIHsKKyAgICBwZ0FkbWlu LkJyb3dzZXIuTm9kZXNbJ3BhcnRpdGlvbiddID0gcGdCcm93c2VyLk5vZGUuZXh0ZW5kKHsKKyAg ICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGll cmFyY2h5LAorICAgICAgcGFyZW50X3R5cGU6ICd0YWJsZScsCisgICAgICBjb2xsZWN0aW9uX3R5 cGU6ICdjb2xsLXBhcnRpdGlvbicsCisgICAgICB0eXBlOiAncGFydGl0aW9uJywKKyAgICAgIGxh YmVsOiBnZXR0ZXh0KCdQYXJ0aXRpb24nKSwKKyAgICAgIGhhc1NRTDogdHJ1ZSwKKyAgICAgIGhh c0RlcGVuZHM6IHRydWUsCisgICAgICBoYXNTdGF0aXN0aWNzOiB0cnVlLAorICAgICAgc3RhdHNQ cmV0dGlmeUZpZWxkczogWydTaXplJywgJ0luZGV4ZXMgc2l6ZScsICdUYWJsZSBzaXplJywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9hc3QgdGFibGUgc2l6ZScsICdUdXBsZSBsZW5n dGgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZWFkIHR1cGxlIGxlbmd0aCcsICdG cmVlIHNwYWNlJ10sCisgICAgICBzcWxBbHRlckhlbHA6ICdzcWwtYWx0ZXJ0YWJsZS5odG1sJywK KyAgICAgIHNxbENyZWF0ZUhlbHA6ICdzcWwtY3JlYXRldGFibGUuaHRtbCcsCisgICAgICBkaWFs b2dIZWxwOiB1cmxfZm9yKCdoZWxwLnN0YXRpYycsIHsnZmlsZW5hbWUnOiAndGFibGVfZGlhbG9n Lmh0bWwnfSksCisgICAgICBoYXNTY3JpcHRUeXBlczogWydjcmVhdGUnXSwKKyAgICAgIGhlaWdo dDogJzk1JScsCisgICAgICB3aWR0aDogJzg1JScsCisgICAgICBJbml0OiBmdW5jdGlvbigpIHsK KyAgICAgICAgLyogQXZvaWQgbXVsaXRwbGUgcmVnaXN0cmF0aW9uIG9mIG1lbnVzICovCisgICAg ICAgIGlmICh0aGlzLmluaXRpYWxpemVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg IHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgICAgIHBnQnJvd3Nlci5hZGRfbWVudXMo W3sKKyAgICAgICAgICBuYW1lOiAndHJ1bmNhdGVfdGFibGUnLCBub2RlOiAncGFydGl0aW9uJywg bW9kdWxlOiB0aGlzLAorICAgICAgICAgIGFwcGxpZXM6IFsnb2JqZWN0JywgJ2NvbnRleHQnXSwg Y2FsbGJhY2s6ICd0cnVuY2F0ZV90YWJsZScsCisgICAgICAgICAgY2F0ZWdvcnk6ICdUcnVuY2F0 ZScsIHByaW9yaXR5OiAzLCBsYWJlbDogZ2V0dGV4dCgnVHJ1bmNhdGUnKSwKKyAgICAgICAgICBp Y29uOiAnZmEgZmEtZXJhc2VyJywgZW5hYmxlIDogJ2NhbkNyZWF0ZScKKyAgICAgICAgfSx7Cisg ICAgICAgICAgbmFtZTogJ3RydW5jYXRlX3RhYmxlX2Nhc2NhZGUnLCBub2RlOiAncGFydGl0aW9u JywgbW9kdWxlOiB0aGlzLAorICAgICAgICAgIGFwcGxpZXM6IFsnb2JqZWN0JywgJ2NvbnRleHQn XSwgY2FsbGJhY2s6ICd0cnVuY2F0ZV90YWJsZV9jYXNjYWRlJywKKyAgICAgICAgICBjYXRlZ29y eTogJ1RydW5jYXRlJywgcHJpb3JpdHk6IDMsIGxhYmVsOiBnZXR0ZXh0KCdUcnVuY2F0ZSBDYXNj YWRlJyksCisgICAgICAgICAgaWNvbjogJ2ZhIGZhLWVyYXNlcicsIGVuYWJsZSA6ICdjYW5DcmVh dGUnCisgICAgICAgIH0seworICAgICAgICAgIC8vIFRvIGVuYWJsZS9kaXNhYmxlIGFsbCB0cmln Z2VycyBmb3IgdGhlIHRhYmxlCisgICAgICAgICAgbmFtZTogJ2VuYWJsZV9hbGxfdHJpZ2dlcnMn LCBub2RlOiAncGFydGl0aW9uJywgbW9kdWxlOiB0aGlzLAorICAgICAgICAgIGFwcGxpZXM6IFsn b2JqZWN0JywgJ2NvbnRleHQnXSwgY2FsbGJhY2s6ICdlbmFibGVfdHJpZ2dlcnNfb25fdGFibGUn LAorICAgICAgICAgIGNhdGVnb3J5OiAnVHJpZ2dlcihzKScsIHByaW9yaXR5OiA0LCBsYWJlbDog Z2V0dGV4dCgnRW5hYmxlIEFsbCcpLAorICAgICAgICAgIGljb246ICdmYSBmYS1jaGVjaycsIGVu YWJsZSA6ICdjYW5DcmVhdGVfd2l0aF90cmlnZ2VyX2VuYWJsZScKKyAgICAgICAgfSx7CisgICAg ICAgICAgbmFtZTogJ2Rpc2FibGVfYWxsX3RyaWdnZXJzJywgbm9kZTogJ3BhcnRpdGlvbicsIG1v ZHVsZTogdGhpcywKKyAgICAgICAgICBhcHBsaWVzOiBbJ29iamVjdCcsICdjb250ZXh0J10sIGNh bGxiYWNrOiAnZGlzYWJsZV90cmlnZ2Vyc19vbl90YWJsZScsCisgICAgICAgICAgY2F0ZWdvcnk6 ICdUcmlnZ2VyKHMpJywgcHJpb3JpdHk6IDQsIGxhYmVsOiBnZXR0ZXh0KCdEaXNhYmxlIEFsbCcp LAorICAgICAgICAgIGljb246ICdmYSBmYS10aW1lcycsIGVuYWJsZSA6ICdjYW5DcmVhdGVfd2l0 aF90cmlnZ2VyX2Rpc2FibGUnCisgICAgICAgIH0seworICAgICAgICAgIG5hbWU6ICdyZXNldF90 YWJsZV9zdGF0cycsIG5vZGU6ICdwYXJ0aXRpb24nLCBtb2R1bGU6IHRoaXMsCisgICAgICAgICAg YXBwbGllczogWydvYmplY3QnLCAnY29udGV4dCddLCBjYWxsYmFjazogJ3Jlc2V0X3RhYmxlX3N0 YXRzJywKKyAgICAgICAgICBjYXRlZ29yeTogJ1Jlc2V0JywgcHJpb3JpdHk6IDQsIGxhYmVsOiBn ZXR0ZXh0KCdSZXNldCBTdGF0aXN0aWNzJyksCisgICAgICAgICAgaWNvbjogJ2ZhIGZhLWJhci1j aGFydCcsIGVuYWJsZSA6ICdjYW5DcmVhdGUnCisgICAgICAgIH0seworICAgICAgICAgIG5hbWU6 ICdkZXRhY2hfcGFydGl0aW9uJywgbm9kZTogJ3BhcnRpdGlvbicsIG1vZHVsZTogdGhpcywKKyAg ICAgICAgICBhcHBsaWVzOiBbJ29iamVjdCcsICdjb250ZXh0J10sIGNhbGxiYWNrOiAnZGV0YWNo X3BhcnRpdGlvbicsCisgICAgICAgICAgcHJpb3JpdHk6IDIsIGxhYmVsOiBnZXR0ZXh0KCdEZXRh Y2ggUGFydGl0aW9uJyksCisgICAgICAgICAgaWNvbjogJ2ZhIGZhLXJlbW92ZScKKyAgICAgICAg fQorICAgICAgICBdKTsKKyAgICAgIH0sCisgICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogZnVu Y3Rpb24oaSkgeworICAgICAgICB2YXIgaWR4ID0gMCwKKyAgICAgICAgICAgIHJlcyA9IHt9LAor ICAgICAgICAgICAgdCA9IHBnQnJvd3Nlci50cmVlOworCisgICAgICAgIGRvIHsKKyAgICAgICAg ICBkID0gdC5pdGVtRGF0YShpKTsKKyAgICAgICAgICBpZiAoCisgICAgICAgICAgICBkLl90eXBl IGluIHBnQnJvd3Nlci5Ob2RlcyAmJiBwZ0Jyb3dzZXIuTm9kZXNbZC5fdHlwZV0uaGFzSWQKKyAg ICAgICAgICApIHsKKyAgICAgICAgICAgIGlmIChkLl90eXBlID09ICdwYXJ0aXRpb24nICYmICdw YXJ0aXRpb24nIGluIHJlcykgeworICAgICAgICAgICAgICBpZiAoISgndGFibGUnIGluIHJlcykp IHsKKyAgICAgICAgICAgICAgICByZXNbJ3RhYmxlJ10gPSBfLmV4dGVuZCh7fSwgZCwgeydwcmlv cml0eSc6IGlkeH0pOworICAgICAgICAgICAgICAgIGlkeCAtPSAxOworICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9IGVsc2UgaWYgKGQuX3R5cGUgPT0gJ3RhYmxlJykgeworICAgICAgICAg ICAgICBpZiAoISgndGFibGUnIGluIHJlcykpIHsKKyAgICAgICAgICAgICAgICByZXNbJ3RhYmxl J10gPSBfLmV4dGVuZCh7fSwgZCwgeydwcmlvcml0eSc6IGlkeH0pOworICAgICAgICAgICAgICAg IGlkeCAtPSAxOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICByZXNbZC5fdHlwZV0gPSBfLmV4dGVuZCh7fSwgZCwgeydwcmlvcml0eSc6IGlkeH0p OworICAgICAgICAgICAgICBpZHggLT0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9Cisg ICAgICAgICAgaSA9IHQuaGFzUGFyZW50KGkpID8gdC5wYXJlbnQoaSkgOiBudWxsOworICAgICAg ICB9IHdoaWxlIChpKTsKKworICAgICAgICByZXR1cm4gcmVzOworICAgICAgfSwKKyAgICAgIGdl bmVyYXRlX3VybDogZnVuY3Rpb24oaXRlbSwgdHlwZSwgZCwgd2l0aF9pZCwgaW5mbykgeworICAg ICAgICBpZiAoXy5pbmRleE9mKFsKKyAgICAgICAgICAgICdzdGF0cycsICdzdGF0aXN0aWNzJywg J2RlcGVuZGVuY3knLCAnZGVwZW5kZW50JywgJ3Jlc2V0JywKKyAgICAgICAgICAgICdnZXRfcmVs YXRpb25zJywgJ2dldF9vZnR5cGUnLCAnZ2V0X2F0dGFjaF90YWJsZXMnCisgICAgICAgICAgICBd LCB0eXBlKSA9PSAtMSkgeworICAgICAgICAgIHJldHVybiBwZ0Jyb3dzZXIuTm9kZS5nZW5lcmF0 ZV91cmwuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0 eXBlID09ICdzdGF0aXN0aWNzJykgeworICAgICAgICAgIHR5cGUgPSAnc3RhdHMnOworICAgICAg ICB9CisKKyAgICAgICAgaW5mbyA9IChfLmlzVW5kZWZpbmVkKGl0ZW0pIHx8IF8uaXNOdWxsKGl0 ZW0pKSA/CisgICAgICAgICAgaW5mbyB8fCB7fSA6IHRoaXMuZ2V0VHJlZU5vZGVIaWVyYXJjaHko aXRlbSk7CisKKyAgICAgICAgcmV0dXJuIFMoJ3RhYmxlLyVzLyVzLyVzLyVzLyVzLyVzJykuc3By aW50ZigKKyAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudCh0eXBlKSwgZW5jb2RlVVJJQ29t cG9uZW50KGluZm9bJ3NlcnZlci1ncm91cCddLl9pZCksCisgICAgICAgICAgICBlbmNvZGVVUklD b21wb25lbnQoaW5mb1snc2VydmVyJ10uX2lkKSwKKyAgICAgICAgICAgIGVuY29kZVVSSUNvbXBv bmVudChpbmZvWydkYXRhYmFzZSddLl9pZCksCisgICAgICAgICAgICBlbmNvZGVVUklDb21wb25l bnQoaW5mb1sncGFydGl0aW9uJ10uc2NoZW1hX2lkKSwKKyAgICAgICAgICAgIGVuY29kZVVSSUNv bXBvbmVudChpbmZvWydwYXJ0aXRpb24nXS5faWQpCisgICAgICAgICAgICApLnZhbHVlKCk7Cisg ICAgICB9LAorICAgICAgY2FuRHJvcDogcGdCcm93c2VyLk5vZGVzWydzY2hlbWEnXS5jYW5DaGls ZERyb3AsCisgICAgICBjYW5Ecm9wQ2FzY2FkZTogcGdCcm93c2VyLk5vZGVzWydzY2hlbWEnXS5j YW5DaGlsZERyb3AsCisgICAgICBjYWxsYmFja3M6IHsKKyAgICAgICAgLyogRW5hYmxlIHRyaWdn ZXIocykgb24gdGFibGUgKi8KKyAgICAgICAgZW5hYmxlX3RyaWdnZXJzX29uX3RhYmxlOiBmdW5j dGlvbihhcmdzKSB7CisgICAgICAgICAgICB2YXIgcGFyYW1zID0geydlbmFibGUnOiB0cnVlIH07 CisgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zZXRfdHJpZ2dlcnMuYXBwbHkodGhpcywgW2Fy Z3MsIHBhcmFtc10pOworICAgICAgICB9LAorICAgICAgICAvKiBEaXNhYmxlIHRyaWdnZXIocykg b24gdGFibGUgKi8KKyAgICAgICAgZGlzYWJsZV90cmlnZ2Vyc19vbl90YWJsZTogZnVuY3Rpb24o YXJncykgeworICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHsnZW5hYmxlJzogZmFsc2UgfTsKKyAg ICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNldF90cmlnZ2Vycy5hcHBseSh0aGlzLCBbYXJncywg cGFyYW1zXSk7CisgICAgICAgIH0sCisgICAgICAgIHNldF90cmlnZ2VyczogZnVuY3Rpb24oYXJn cywgcGFyYW1zKSB7CisgICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHNlbmQgcmVxdWVz dCB0byBlbmFibGUgb3IKKyAgICAgICAgICAvLyBkaXNhYmxlIHRyaWdnZXJzIG9uIHRhYmxlIGxl dmVsCisgICAgICAgICAgdmFyIGlucHV0ID0gYXJncyB8fCB7fTsKKyAgICAgICAgICBvYmogPSB0 aGlzLAorICAgICAgICAgIHQgPSBwZ0Jyb3dzZXIudHJlZSwKKyAgICAgICAgICBpID0gaW5wdXQu aXRlbSB8fCB0LnNlbGVjdGVkKCksCisgICAgICAgICAgZCA9IGkgJiYgaS5sZW5ndGggPT0gMSA/ IHQuaXRlbURhdGEoaSkgOiB1bmRlZmluZWQ7CisgICAgICAgICAgaWYgKCFkKQorICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgIHVybDog b2JqLmdlbmVyYXRlX3VybChpLCAnc2V0X3RyaWdnZXInICwgZCwgdHJ1ZSksCisgICAgICAgICAg ICB0eXBlOidQVVQnLAorICAgICAgICAgICAgZGF0YTogcGFyYW1zLAorICAgICAgICAgICAgZGF0 YVR5cGU6ICJqc29uIiwKKyAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgeworICAg ICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MgPT0gMSkgeworICAgICAgICAgICAgICAgIGFsZXJ0 aWZ5LnN1Y2Nlc3MocmVzLmluZm8pOworICAgICAgICAgICAgICAgIHQudW5sb2FkKGkpOworICAg ICAgICAgICAgICAgIHQuc2V0SW5vZGUoaSk7CisgICAgICAgICAgICAgICAgdC5kZXNlbGVjdChp KTsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg ICAgICAgdC5zZWxlY3QoaSk7CisgICAgICAgICAgICAgICAgfSwgMTApOworICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKHhociwgc3Rh dHVzLCBlcnJvcikgeworICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHZhciBl cnIgPSAkLnBhcnNlSlNPTih4aHIucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAo ZXJyLnN1Y2Nlc3MgPT0gMCkgeworICAgICAgICAgICAgICAgICAgYWxlcnRpZnkuZXJyb3IoZXJy LmVycm9ybXNnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0gY2F0Y2ggKGUp IHt9CisgICAgICAgICAgICAgIHQudW5sb2FkKGkpOworICAgICAgICAgICAgfQorICAgICAgICAg IH0pOworICAgICAgICB9LAorICAgICAgICAvKiBUcnVuY2F0ZSB0YWJsZSAqLworICAgICAgICB0 cnVuY2F0ZV90YWJsZTogZnVuY3Rpb24oYXJncykgeworICAgICAgICAgICAgdmFyIHBhcmFtcyA9 IHsnY2FzY2FkZSc6IGZhbHNlIH07CisgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy50cnVuY2F0 ZS5hcHBseSh0aGlzLCBbYXJncywgcGFyYW1zXSk7CisgICAgICAgIH0sCisgICAgICAgIC8qIFRy dW5jYXRlIHRhYmxlIHdpdGggY2FzY2FkZSAqLworICAgICAgICB0cnVuY2F0ZV90YWJsZV9jYXNj YWRlOiBmdW5jdGlvbihhcmdzKSB7CisgICAgICAgICAgICB2YXIgcGFyYW1zID0geydjYXNjYWRl JzogdHJ1ZSB9OworICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MudHJ1bmNhdGUuYXBwbHkodGhp cywgW2FyZ3MsIHBhcmFtc10pOworICAgICAgICB9LAorICAgICAgICB0cnVuY2F0ZTogZnVuY3Rp b24oYXJncywgcGFyYW1zKSB7CisgICAgICAgICAgdmFyIGlucHV0ID0gYXJncyB8fCB7fTsKKyAg ICAgICAgICBvYmogPSB0aGlzLAorICAgICAgICAgIHQgPSBwZ0Jyb3dzZXIudHJlZSwKKyAgICAg ICAgICBpID0gaW5wdXQuaXRlbSB8fCB0LnNlbGVjdGVkKCksCisgICAgICAgICAgZCA9IGkgJiYg aS5sZW5ndGggPT0gMSA/IHQuaXRlbURhdGEoaSkgOiB1bmRlZmluZWQ7CisKKyAgICAgICAgICBp ZiAoIWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICBhbGVydGlmeS5j b25maXJtKAorICAgICAgICAgICAgZ2V0dGV4dCgnVHJ1bmNhdGUgVGFibGUnKSwKKyAgICAgICAg ICAgIFMoZ2V0dGV4dCgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHRydW5jYXRlIHRhYmxlICVz PycpKS5zcHJpbnRmKGQubGFiZWwpLnZhbHVlKCksCisgICAgICAgICAgICBmdW5jdGlvbiAoZSkg eworICAgICAgICAgICAgaWYgKGUpIHsKKyAgICAgICAgICAgICAgdmFyIGRhdGEgPSBkOworICAg ICAgICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAgICAgIHVybDogb2JqLmdlbmVyYXRlX3Vy bChpLCAndHJ1bmNhdGUnICwgZCwgdHJ1ZSksCisgICAgICAgICAgICAgICAgdHlwZTonUFVUJywK KyAgICAgICAgICAgICAgICBkYXRhOiBwYXJhbXMsCisgICAgICAgICAgICAgICAgZGF0YVR5cGU6 ICJqc29uIiwKKyAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAg ICAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcyA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAg IGFsZXJ0aWZ5LnN1Y2Nlc3MocmVzLmluZm8pOworICAgICAgICAgICAgICAgICAgICB0LnJlbW92 ZUljb24oaSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGEuaWNvbiA9ICdpY29uLXRhYmxlJzsK KyAgICAgICAgICAgICAgICAgICAgdC5hZGRJY29uKGksIHtpY29uOiBkYXRhLmljb259KTsKKyAg ICAgICAgICAgICAgICAgICAgdC51bmxvYWQoaSk7CisgICAgICAgICAgICAgICAgICAgIHQuc2V0 SW5vZGUoaSk7CisgICAgICAgICAgICAgICAgICAgIHQuZGVzZWxlY3QoaSk7CisgICAgICAgICAg ICAgICAgICAgIC8vIEZldGNoIHVwZGF0ZWQgZGF0YSBmcm9tIHNlcnZlcgorICAgICAgICAgICAg ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgIHQu c2VsZWN0KGkpOworICAgICAgICAgICAgICAgICAgICB9LCAxMCk7CisgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24o eGhyLCBzdGF0dXMsIGVycm9yKSB7CisgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAg ICAgICAgICAgICB2YXIgZXJyID0gJC5wYXJzZUpTT04oeGhyLnJlc3BvbnNlVGV4dCk7CisgICAg ICAgICAgICAgICAgICAgIGlmIChlcnIuc3VjY2VzcyA9PSAwKSB7CisgICAgICAgICAgICAgICAg ICAgICAgYWxlcnRpZnkuZXJyb3IoZXJyLmVycm9ybXNnKTsKKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge30KKyAgICAgICAgICAgICAgICAgIHQu dW5sb2FkKGkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSk7CisgICAgICAg ICAgICB9fSwKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkge30KKyAgICAgICAgICApOworICAgICAg ICB9LAorICAgICAgICByZXNldF90YWJsZV9zdGF0czogZnVuY3Rpb24oYXJncykgeworICAgICAg ICAgIHZhciBpbnB1dCA9IGFyZ3MgfHwge30sCisgICAgICAgICAgICBvYmogPSB0aGlzLAorICAg ICAgICAgICAgdCA9IHBnQnJvd3Nlci50cmVlLAorICAgICAgICAgICAgaSA9IGlucHV0Lml0ZW0g fHwgdC5zZWxlY3RlZCgpLAorICAgICAgICAgICAgZCA9IGkgJiYgaS5sZW5ndGggPT0gMSA/IHQu aXRlbURhdGEoaSkgOiB1bmRlZmluZWQ7CisKKyAgICAgICAgICBpZiAoIWQpCisgICAgICAgICAg ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICBhbGVydGlmeS5jb25maXJtKAorICAgICAgICAg ICAgZ2V0dGV4dCgnUmVzZXQgc3RhdGlzdGljcycpLAorICAgICAgICAgICAgUyhnZXR0ZXh0KCdB cmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVzZXQgdGhlIHN0YXRpc3RpY3MgZm9yIHRhYmxlICVz PycpKS5zcHJpbnRmKGQuX2xhYmVsKS52YWx1ZSgpLAorICAgICAgICAgICAgZnVuY3Rpb24gKGUp IHsKKyAgICAgICAgICAgICAgaWYgKGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGQ7 CisgICAgICAgICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgICAgICAgIHVybDogb2JqLmdl bmVyYXRlX3VybChpLCAncmVzZXQnICwgZCwgdHJ1ZSksCisgICAgICAgICAgICAgICAgICB0eXBl OidERUxFVEUnLAorICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKSB7Cisg ICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcyA9PSAxKSB7CisgICAgICAgICAgICAg ICAgICAgICAgYWxlcnRpZnkuc3VjY2VzcyhyZXMuaW5mbyk7CisgICAgICAgICAgICAgICAgICAg ICAgdC5yZW1vdmVJY29uKGkpOworICAgICAgICAgICAgICAgICAgICAgIGRhdGEuaWNvbiA9ICdp Y29uLXRhYmxlJzsKKyAgICAgICAgICAgICAgICAgICAgICB0LmFkZEljb24oaSwge2ljb246IGRh dGEuaWNvbn0pOworICAgICAgICAgICAgICAgICAgICAgIHQudW5sb2FkKGkpOworICAgICAgICAg ICAgICAgICAgICAgIHQuc2V0SW5vZGUoaSk7CisgICAgICAgICAgICAgICAgICAgICAgdC5kZXNl bGVjdChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAvLyBGZXRjaCB1cGRhdGVkIGRhdGEgZnJv bSBzZXJ2ZXIKKyAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewor ICAgICAgICAgICAgICAgICAgICAgICAgdC5zZWxlY3QoaSk7CisgICAgICAgICAgICAgICAgICAg ICAgfSwgMTApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9LAor ICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKHhociwgc3RhdHVzLCBlcnJvcikgewor ICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIg PSAkLnBhcnNlSlNPTih4aHIucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICBp ZiAoZXJyLnN1Y2Nlc3MgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnRpZnku ZXJyb3IoZXJyLmVycm9ybXNnKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CisgICAgICAgICAgICAgICAgICAgIHQudW5sb2FkKGkp OworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZnVuY3Rpb24oKSB7fQorICAgICAgICAg ICk7CisgICAgICAgIH0sCisgICAgICAgIGRldGFjaF9wYXJ0aXRpb246IGZ1bmN0aW9uKGFyZ3Mp IHsKKyAgICAgICAgICB2YXIgaW5wdXQgPSBhcmdzIHx8IHt9LAorICAgICAgICAgICAgb2JqID0g dGhpcywKKyAgICAgICAgICAgIHQgPSBwZ0Jyb3dzZXIudHJlZSwKKyAgICAgICAgICAgIGkgPSBp bnB1dC5pdGVtIHx8IHQuc2VsZWN0ZWQoKSwKKyAgICAgICAgICAgIGQgPSBpICYmIGkubGVuZ3Ro ID09IDEgPyB0Lml0ZW1EYXRhKGkpIDogdW5kZWZpbmVkOworCisgICAgICAgICAgaWYgKCFkKQor ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgYWxlcnRpZnkuY29uZmlybSgK KyAgICAgICAgICAgIGdldHRleHQoJ0RldGFjaCBQYXJ0aXRpb24nKSwKKyAgICAgICAgICAgIFMo Z2V0dGV4dCgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRldGFjaCB0aGUgcGFydGl0aW9uICVz PycpKS5zcHJpbnRmKGQuX2xhYmVsKS52YWx1ZSgpLAorICAgICAgICAgICAgZnVuY3Rpb24gKGUp IHsKKyAgICAgICAgICAgICAgaWYgKGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGQ7 CisgICAgICAgICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgICAgICAgIHVybDogb2JqLmdl bmVyYXRlX3VybChpLCAnZGV0YWNoJyAsIGQsIHRydWUpLAorICAgICAgICAgICAgICAgICAgdHlw ZTonUFVUJywKKyAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgeworICAg ICAgICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MgPT0gMSkgeworICAgICAgICAgICAgICAg ICAgICAgIGFsZXJ0aWZ5LnN1Y2Nlc3MocmVzLmluZm8pOworICAgICAgICAgICAgICAgICAgICAg IHZhciBuID0gdC5uZXh0KGkpOworICAgICAgICAgICAgICAgICAgICAgIGlmICghbiB8fCAhbi5s ZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSB0LnByZXYoaSk7CisgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoIW4gfHwgIW4ubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIG4gPSB0LnBhcmVudChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdC5z ZXRJbm9kZShuLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgdC5yZW1vdmUoaSk7CisgICAgICAg ICAgICAgICAgICAgICAgaWYgKG4ubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0 LnNlbGVjdChuKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rp b24oeGhyLCBzdGF0dXMsIGVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAg ICAgICAgICAgICAgICAgICAgdmFyIGVyciA9ICQucGFyc2VKU09OKHhoci5yZXNwb25zZVRleHQp OworICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIuc3VjY2VzcyA9PSAwKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBhbGVydGlmeS5lcnJvcihlcnIuZXJyb3Jtc2cpOworICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge30KKyAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfSwKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkge30KKyAgICAgICAgICApOworICAg ICAgIH0KKyAgICAgIH0sCisgICAgICBtb2RlbDogcGdCcm93c2VyLk5vZGUuTW9kZWwuZXh0ZW5k KHsKKyAgICAgICAgZGVmYXVsdHM6IHsKKyAgICAgICAgICBuYW1lOiB1bmRlZmluZWQsCisgICAg ICAgICAgb2lkOiB1bmRlZmluZWQsCisgICAgICAgICAgc3Bjb2lkOiB1bmRlZmluZWQsCisgICAg ICAgICAgc3BjbmFtZTogdW5kZWZpbmVkLAorICAgICAgICAgIHJlbG93bmVyOiB1bmRlZmluZWQs CisgICAgICAgICAgcmVsYWNsOiB1bmRlZmluZWQsCisgICAgICAgICAgcmVsaGFzb2lkczogdW5k ZWZpbmVkLAorICAgICAgICAgIHJlbGhhc3N1YmNsYXNzOiB1bmRlZmluZWQsCisgICAgICAgICAg cmVsdHVwbGVzOiB1bmRlZmluZWQsCisgICAgICAgICAgZGVzY3JpcHRpb246IHVuZGVmaW5lZCwK KyAgICAgICAgICBjb25uYW1lOiB1bmRlZmluZWQsCisgICAgICAgICAgY29ua2V5OiB1bmRlZmlu ZWQsCisgICAgICAgICAgaXNyZXBsOiB1bmRlZmluZWQsCisgICAgICAgICAgdHJpZ2dlcmNvdW50 OiB1bmRlZmluZWQsCisgICAgICAgICAgcmVscGVyc2lzdGVuY2U6IHVuZGVmaW5lZCwKKyAgICAg ICAgICBmaWxsZmFjdG9yOiB1bmRlZmluZWQsCisgICAgICAgICAgcmVsb2Z0eXBlOiB1bmRlZmlu ZWQsCisgICAgICAgICAgdHlwbmFtZTogdW5kZWZpbmVkLAorICAgICAgICAgIGxhYmVsczogdW5k ZWZpbmVkLAorICAgICAgICAgIHByb3ZpZGVyczogdW5kZWZpbmVkLAorICAgICAgICAgIGlzX3N5 c190YWJsZTogdW5kZWZpbmVkLAorICAgICAgICAgIGNvbGxfaW5oZXJpdHM6IFtdLAorICAgICAg ICAgIGhhc3RvYXN0dGFibGU6IHRydWUsCisgICAgICAgICAgdG9hc3RfYXV0b3ZhY3V1bV9lbmFi bGVkOiBmYWxzZSwKKyAgICAgICAgICBhdXRvdmFjdXVtX2VuYWJsZWQ6IGZhbHNlLAorICAgICAg ICAgIHByaW1hcnlfa2V5OiBbXSwKKyAgICAgICAgICBwYXJ0aXRpb25zOiBbXSwKKyAgICAgICAg ICBwYXJ0aXRpb25fdHlwZTogJ3JhbmdlJywKKyAgICAgICAgICBpc19wYXJ0aXRpb25lZDogZmFs c2UsCisgICAgICAgICAgcGFydGl0aW9uX3ZhbHVlOiB1bmRlZmluZWQKKyAgICAgICAgfSwKKyAg ICAgICAgLy8gRGVmYXVsdCB2YWx1ZXMhCisgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGF0 dHJzLCBhcmdzKSB7CisgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAgICAgaWYg KF8uc2l6ZShhdHRycykgPT09IDApIHsKKyAgICAgICAgICAgIHZhciB1c2VySW5mbyA9IHBnQnJv d3Nlci5zZXJ2ZXJJbmZvW2FyZ3Mubm9kZV9pbmZvLnNlcnZlci5faWRdLnVzZXIsCisgICAgICAg ICAgICAgICAgc2NoZW1hSW5mbyA9IGFyZ3Mubm9kZV9pbmZvLnNjaGVtYTsKKworICAgICAgICAg ICAgdGhpcy5zZXQoeworICAgICAgICAgICAgICAncmVsb3duZXInOiB1c2VySW5mby5uYW1lLCAn c2NoZW1hJzogc2NoZW1hSW5mby5fbGFiZWwKKyAgICAgICAgICAgIH0sIHtzaWxlbnQ6IHRydWV9 KTsKKyAgICAgICAgICB9CisgICAgICAgICAgcGdCcm93c2VyLk5vZGUuTW9kZWwucHJvdG90eXBl LmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAgICAgICB9LAorICAgICAg ICBzY2hlbWE6IFt7CisgICAgICAgICAgaWQ6ICduYW1lJywgbGFiZWw6IGdldHRleHQoJ05hbWUn KSwgdHlwZTogJ3RleHQnLAorICAgICAgICAgIG1vZGU6IFsncHJvcGVydGllcycsICdjcmVhdGUn LCAnZWRpdCddLCBkaXNhYmxlZDogJ2luU2NoZW1hJworICAgICAgICB9LHsKKyAgICAgICAgICBp ZDogJ29pZCcsIGxhYmVsOiBnZXR0ZXh0KCdPSUQnKSwgdHlwZTogJ3RleHQnLCBtb2RlOiBbJ3By b3BlcnRpZXMnXQorICAgICAgICB9LHsKKyAgICAgICAgICBpZDogJ3JlbG93bmVyJywgbGFiZWw6 IGdldHRleHQoJ093bmVyJyksIHR5cGU6ICd0ZXh0Jywgbm9kZTogJ3JvbGUnLAorICAgICAgICAg IG1vZGU6IFsncHJvcGVydGllcycsICdjcmVhdGUnLCAnZWRpdCddLCBzZWxlY3QyOiB7YWxsb3dD bGVhcjogZmFsc2V9LAorICAgICAgICAgIGRpc2FibGVkOiAnaW5TY2hlbWEnLCBjb250cm9sOiAn bm9kZS1saXN0LWJ5LW5hbWUnCisgICAgICAgIH0seworICAgICAgICAgIGlkOiAnc2NoZW1hJywg bGFiZWw6IGdldHRleHQoJ1NjaGVtYScpLCB0eXBlOiAndGV4dCcsIG5vZGU6ICdzY2hlbWEnLAor ICAgICAgICAgIGNvbnRyb2w6ICdub2RlLWxpc3QtYnktbmFtZScsIG1vZGU6IFsnY3JlYXRlJywg J2VkaXQnLCAncHJvcGVydGllcyddLAorICAgICAgICAgIGRpc2FibGVkOiAnaW5TY2hlbWEnLCBm aWx0ZXI6IGZ1bmN0aW9uKGQpIHsKKyAgICAgICAgICAgIC8vIElmIHNjaGVtYSBuYW1lIHN0YXJ0 IHdpdGggcGdfKiB0aGVuIHdlIG5lZWQgdG8gZXhjbHVkZSB0aGVtCisgICAgICAgICAgICBpZihk ICYmIGQubGFiZWwubWF0Y2goL15wZ18vKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg ICAgICAgICAgfSwgY2FjaGVfbm9kZTogJ2RhdGFiYXNlJywgY2FjaGVfbGV2ZWw6ICdkYXRhYmFz ZScKKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdzcGNuYW1lJywgbGFiZWw6IGdldHRleHQo J1RhYmxlc3BhY2UnKSwgbm9kZTogJ3RhYmxlc3BhY2UnLAorICAgICAgICAgIHR5cGU6ICd0ZXh0 JywgY29udHJvbDogJ25vZGUtbGlzdC1ieS1uYW1lJywgZGlzYWJsZWQ6ICdpblNjaGVtYScsCisg ICAgICAgICAgbW9kZTogWydwcm9wZXJ0aWVzJywgJ2NyZWF0ZScsICdlZGl0J10sCisgICAgICAg ICAgZmlsdGVyOiBmdW5jdGlvbihkKSB7CisgICAgICAgICAgICAvLyBJZiB0YWJsZXNwYWNlIG5h bWUgaXMgbm90ICJwZ19nbG9iYWwiIHRoZW4gd2UgbmVlZCB0byBleGNsdWRlIHRoZW0KKyAgICAg ICAgICAgIHJldHVybiAoIShkICYmIGQubGFiZWwubWF0Y2goL3BnX2dsb2JhbC8pKSkKKyAgICAg ICAgICB9CisgICAgICAgIH0seworICAgICAgICAgIGlkOiAncGFydGl0aW9uJywgdHlwZTogJ2dy b3VwJywgbGFiZWw6IGdldHRleHQoJ1BhcnRpdGlvbicpLAorICAgICAgICAgIG1vZGU6IFsnZWRp dCcsICdjcmVhdGUnXSwgbWluX3ZlcnNpb246IDEwMDAwMCwKKyAgICAgICAgICB2aXNpYmxlOiBm dW5jdGlvbihtKSB7CisgICAgICAgICAgICAvLyBBbHdheXMgc2hvdyBpbiBjYXNlIG9mIGNyZWF0 ZSBtb2RlCisgICAgICAgICAgICBpZiAobS5pc05ldygpIHx8IG0uZ2V0KCdpc19wYXJ0aXRpb25l ZCcpKQorICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0seworICAgICAgICAgIGlkOiAnaXNfcGFydGl0aW9u ZWQnLCBsYWJlbDpnZXR0ZXh0KCdQYXJ0aXRpb25lZCBUYWJsZT8nKSwgY2VsbDogJ3N3aXRjaCcs CisgICAgICAgICAgdHlwZTogJ3N3aXRjaCcsIG1vZGU6IFsncHJvcGVydGllcycsICdjcmVhdGUn LCAnZWRpdCddLAorICAgICAgICAgIHZpc2libGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAg IGlmKCFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvKSAmJiAhXy5pc1VuZGVmaW5lZChtLm5vZGVf aW5mby5zZXJ2ZXIpCisgICAgICAgICAgICAgICYmICFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZv LnNlcnZlci52ZXJzaW9uKSAmJgorICAgICAgICAgICAgICBtLm5vZGVfaW5mby5zZXJ2ZXIudmVy c2lvbiA+PSAxMDAwMDApCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAg ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfSwKKyAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rp b24obSkgeworICAgICAgICAgICAgaWYgKCFtLmlzTmV3KCkpCisgICAgICAgICAgICAgIHJldHVy biB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAg fSx7CisgICAgICAgICAgaWQ6ICdkZXNjcmlwdGlvbicsIGxhYmVsOiBnZXR0ZXh0KCdDb21tZW50 JyksIHR5cGU6ICdtdWx0aWxpbmUnLAorICAgICAgICAgIG1vZGU6IFsncHJvcGVydGllcycsICdj cmVhdGUnLCAnZWRpdCddLCBkaXNhYmxlZDogJ2luU2NoZW1hJworICAgICAgICB9LAorICAgICAg ICB7CisgICAgICAgICAgaWQ6ICdwYXJ0aXRpb25fdmFsdWUnLCBsYWJlbDpnZXR0ZXh0KCdQYXJ0 aXRpb24gU2NoZW1lJyksCisgICAgICAgICAgdHlwZTogJ3RleHQnLCB2aXNpYmxlOiBmYWxzZQor ICAgICAgICB9LHsKKyAgICAgICAgICBpZDogJ2NvbGxfaW5oZXJpdHMnLCBsYWJlbDogZ2V0dGV4 dCgnSW5oZXJpdGVkIGZyb20gdGFibGUocyknKSwKKyAgICAgICAgICB0eXBlOiAndGV4dCcsIGdy b3VwOiBnZXR0ZXh0KCdBZHZhbmNlZCcpLCBtb2RlOiBbJ3Byb3BlcnRpZXMnXQorICAgICAgICB9 LHsKKyAgICAgICAgICBpZDogJ0NvbHVtbnMnLCB0eXBlOiAnZ3JvdXAnLCBsYWJlbDogZ2V0dGV4 dCgnQ29sdW1ucycpLAorICAgICAgICAgIG1vZGU6IFsnZWRpdCcsICdjcmVhdGUnXSwgbWluX3Zl cnNpb246IDEwMDAwMCwKKyAgICAgICAgICB2aXNpYmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAg ICAgICAvLyBBbHdheXMgaGlkZSBpbiBjYXNlIG9mIHBhcnRpdGlvbiB0YWJsZS4KKyAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgIH0seworICAgICAgICAgIC8v IFRhYiBjb250cm9sIGZvciBjb2x1bW5zCisgICAgICAgICAgaWQ6ICdjb2x1bW5zJywgbGFiZWw6 IGdldHRleHQoJ0NvbHVtbnMnKSwgdHlwZTogJ2NvbGxlY3Rpb24nLAorICAgICAgICAgIGdyb3Vw OiBnZXR0ZXh0KCdDb2x1bW5zJyksCisgICAgICAgICAgbW9kZWw6IHBnQnJvd3Nlci5Ob2Rlc1sn Y29sdW1uJ10ubW9kZWwsCisgICAgICAgICAgc3Vibm9kZTogcGdCcm93c2VyLk5vZGVzWydjb2x1 bW4nXS5tb2RlbCwKKyAgICAgICAgICBtb2RlOiBbJ2NyZWF0ZScsICdlZGl0J10sCisgICAgICAg ICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgcGFy dGl0aW9uZWQgdGFibGUgcmVtb3ZlIGluaGVyaXRlZCBjb2x1bW5zCisgICAgICAgICAgICBpZiAo bS5pc05ldygpICYmIG0uZ2V0KCdpc19wYXJ0aXRpb25lZCcpKSB7CisgICAgICAgICAgICAgIHNl dFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbGwgPSBtLmdldCgn Y29sdW1ucycpOworICAgICAgICAgICAgICAgIGNvbGwucmVtb3ZlKGNvbGwuZmlsdGVyKGZ1bmN0 aW9uKG1vZGVsKSB7CisgICAgICAgICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChtb2RlbC5n ZXQoJ2luaGVyaXRlZGZyb20nKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK KyAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pKTsKKyAg ICAgICAgICAgICAgfSwgMTApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZih0aGlz Lm5vZGVfaW5mbyAmJiAgJ2NhdGFsb2cnIGluIHRoaXMubm9kZV9pbmZvKQorICAgICAgICAgICAg eworICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9LAorICAgICAgICAgIGRlcHM6IFsndHlwbmFtZScs ICdpc19wYXJ0aXRpb25lZCddLAorICAgICAgICAgIGNhbkFkZDogJ2NoZWNrX2dyaWRfYWRkX2Nv bmRpdGlvbicsCisgICAgICAgICAgY2FuRWRpdDogdHJ1ZSwgY2FuRGVsZXRlOiB0cnVlLAorICAg ICAgICAgIC8vIEZvciBlYWNoIHJvdyBlZGl0L2RlbGV0ZSBidXR0b24gZW5hYmxlL2Rpc2FibGUK KyAgICAgICAgICBjYW5FZGl0Um93OiAnY2hlY2tfZ3JpZF9yb3dfZWRpdF9kZWxldGUnLAorICAg ICAgICAgIGNhbkRlbGV0ZVJvdzogJ2NoZWNrX2dyaWRfcm93X2VkaXRfZGVsZXRlJywKKyAgICAg ICAgICB1bmlxdWVDb2wgOiBbJ25hbWUnXSwKKyAgICAgICAgICBjb2x1bW5zIDogWyduYW1lJyAs ICdjbHR5cGUnLCAnYXR0bGVuJywgJ2F0dHByZWNpc2lvbicsICdhdHRub3RudWxsJywgJ2lzX3By aW1hcnlfa2V5J10sCisgICAgICAgICAgY29udHJvbDogQmFja2Zvcm0uVW5pcXVlQ29sQ29sbGVj dGlvbkNvbnRyb2wuZXh0ZW5kKHsKKyAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkg eworICAgICAgICAgICAgICBCYWNrZm9ybS5VbmlxdWVDb2xDb2xsZWN0aW9uQ29udHJvbC5wcm90 b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAgICAgICB2 YXIgc2VsZiA9IHRoaXMsCisgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uID0gc2VsZi5tb2Rl bC5nZXQoc2VsZi5maWVsZC5nZXQoJ25hbWUnKSk7CisKKyAgICAgICAgICAgICAgY29sbGVjdGlv bi5vbigiY2hhbmdlOmlzX3ByaW1hcnlfa2V5IiwgZnVuY3Rpb24obSkgeworICAgICAgICAgICAg ICAgIHZhciBwcmltYXJ5X2tleV9jb2xsID0gc2VsZi5tb2RlbC5nZXQoJ3ByaW1hcnlfa2V5Jyks CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbl9uYW1lID0gbS5nZXQoJ25hbWUnKSwKKyAgICAg ICAgICAgICAgICAgICAgcHJpbWFyeV9rZXk7CisKKyAgICAgICAgICAgICAgICBpZihtLmdldCgn aXNfcHJpbWFyeV9rZXknKSkgeworICAgICAgICAgICAgICAgIC8vIEFkZCBjb2x1bW4gdG8gcHJp bWFyeSBrZXkuCisgICAgICAgICAgICAgICAgICBpZiAocHJpbWFyeV9rZXlfY29sbC5sZW5ndGgg PCAxKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW1hcnlfa2V5ID0gbmV3IChwcmltYXJ5X2tl eV9jb2xsLm1vZGVsKSh7fSwgeworICAgICAgICAgICAgICAgICAgICAgIHRvcDogc2VsZi5tb2Rl bCwKKyAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBwcmltYXJ5X2tleV9jb2xsLAor ICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHByaW1hcnlfa2V5X2NvbGwKKyAgICAgICAg ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIHByaW1hcnlfa2V5X2NvbGwuYWRk KHByaW1hcnlfa2V5KTsKKyAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgICAgIHByaW1hcnlfa2V5ID0gcHJpbWFyeV9rZXlfY29sbC5maXJzdCgpOworICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IGFsdGVyIGV4aXN0aW5nIHBy aW1hcnkga2V5IGNvbHVtbnMuCisgICAgICAgICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChw cmltYXJ5X2tleS5nZXQoJ29pZCcpKSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgcHJpbWFy eV9rZXlfY29sdW1uX2NvbGwgPSBwcmltYXJ5X2tleS5nZXQoJ2NvbHVtbnMnKSwKKyAgICAgICAg ICAgICAgICAgICAgICBwcmltYXJ5X2tleV9jb2x1bW5fZXhpc3QgPSBwcmltYXJ5X2tleV9jb2x1 bW5fY29sbC53aGVyZSh7Y29sdW1uOmNvbHVtbl9uYW1lfSk7CisKKyAgICAgICAgICAgICAgICAg ICAgaWYgKHByaW1hcnlfa2V5X2NvbHVtbl9leGlzdC5sZW5ndGggPT0gMCkgeworICAgICAgICAg ICAgICAgICAgICAgIHZhciBwcmltYXJ5X2tleV9jb2x1bW4gPSBuZXcgKHByaW1hcnlfa2V5X2Nv bHVtbl9jb2xsLm1vZGVsKSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbHVtbjogY29s dW1uX25hbWV9LCB7IHNpbGVudDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdG9w OiBzZWxmLm1vZGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBwcmlt YXJ5X2tleV9jb2xsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiBwcmltYXJ5 X2tleV9jb2xsCisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg ICAgICAgIHByaW1hcnlfa2V5X2NvbHVtbl9jb2xsLmFkZChwcmltYXJ5X2tleV9jb2x1bW4pOwor ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXlf Y29sdW1uX2NvbGwudHJpZ2dlcigncGdhZG1pbjptdWx0aWNvbHVtbjp1cGRhdGVkJywgcHJpbWFy eV9rZXlfY29sdW1uX2NvbGwpOworICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyByZW1vdmUgY29sdW1uIGZyb20gcHJpbWFy eSBrZXkuCisgICAgICAgICAgICAgICAgICBpZiAocHJpbWFyeV9rZXlfY29sbC5sZW5ndGggPiAw KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBwcmltYXJ5X2tleSA9IHByaW1hcnlfa2V5X2Nv bGwuZmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IGFsdGVyIGV4aXN0aW5n IHByaW1hcnkga2V5IGNvbHVtbnMuCisgICAgICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVm aW5lZChwcmltYXJ5X2tleS5nZXQoJ29pZCcpKSkgeworICAgICAgICAgICAgICAgICAgICAgIHJl dHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHZhciAg cHJpbWFyeV9rZXlfY29sdW1uX2NvbGwgPSBwcmltYXJ5X2tleS5nZXQoJ2NvbHVtbnMnKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRDb2xzID0gcHJpbWFyeV9rZXlfY29sdW1uX2Nv bGwud2hlcmUoe2NvbHVtbjpjb2x1bW5fbmFtZX0pOworICAgICAgICAgICAgICAgICAgICBpZiAo cmVtb3ZlZENvbHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlf a2V5X2NvbHVtbl9jb2xsLnJlbW92ZShyZW1vdmVkQ29scyk7CisgICAgICAgICAgICAgICAgICAg ICAgXy5lYWNoKHJlbW92ZWRDb2xzLCBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBtLmRlc3Ryb3koKTsKKyAgICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAg ICAgICAgICAgIGlmIChwcmltYXJ5X2tleV9jb2x1bW5fY29sbC5sZW5ndGggPT0gMCkgeworICAg ICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIFRoZXJlIHdpbGwgYmUgb25seSBvbiBwcmltYXJ5IGtleSBzbyBy ZW1vdmUgdGhlIGZpcnN0IG9uZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9r ZXlfY29sbC5yZW1vdmUocHJpbWFyeV9rZXlfY29sbC5maXJzdCgpKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogSWRlYWxseSBhYm92ZSBsaW5lIG9mIGNvZGUgc2hvdWxkIGJlICJwcmlt YXJ5X2tleV9jb2xsLnJlc2V0KCkiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBCdXQg b3VyIGN1c3RvbSBEYXRhQ29sbGVjdGlvbiAoZXh0ZW5kZWQgZnJvbSBCYWNrYm9uZSBjb2xsZWN0 aW9uIGluIGRhdGFtb2RlbC5qcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICogZG9lcyBu b3QgcmVzcG9uZCB0byByZXNldCBldmVudCwgaXQgb25seSBzdXBwb3J0cyBhZGQsIHJlbW92ZSwg Y2hhbmdlIGV2ZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICogQW5kIGhlbmNlIG5v IGN1c3RvbSBldmVudCBsaXN0ZW5lcnMvdmFsaWRhdG9ycyBnZXQgY2FsbGVkIGZvciByZXNldCBl dmVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAg ICAgICB9LCAxMCk7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgIHByaW1hcnlfa2V5X2NvbHVtbl9jb2xsLnRyaWdnZXIo J3BnYWRtaW46bXVsdGljb2x1bW46dXBkYXRlZCcsIHByaW1hcnlfa2V5X2NvbHVtbl9jb2xsKTsK KyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0p CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsKKyAgICAg ICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSB0aGlzLm1vZGVsLmdldCh0aGlzLmZpZWxkLmdldCgn bmFtZScpKTsKKyAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24pIHsKKyAgICAgICAgICAgICAg ICBjb2xsZWN0aW9uLm9mZigiY2hhbmdlOmlzX3ByaW1hcnlfa2V5Iik7CisgICAgICAgICAgICAg IH0KKworICAgICAgICAgICAgICBCYWNrZm9ybS5VbmlxdWVDb2xDb2xsZWN0aW9uQ29udHJvbC5w cm90b3R5cGUucmVtb3ZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgfSksCisgICAgICAgICAgYWxsb3dNdWx0aXBsZUVtcHR5Um93OiBmYWxzZQorICAg ICAgICB9LHsKKyAgICAgICAgICBpZDogJ2luaGVyaXRlZF90YWJsZXNfY250JywgbGFiZWw6IGdl dHRleHQoJ0luaGVyaXRlZCB0YWJsZXMgY291bnQnKSwKKyAgICAgICAgICB0eXBlOiAndGV4dCcs IG1vZGU6IFsncHJvcGVydGllcyddLCBncm91cDogZ2V0dGV4dCgnQWR2YW5jZWQnKSwKKyAgICAg ICAgICBkaXNhYmxlZDogJ2luU2NoZW1hJworICAgICAgICB9LHsKKyAgICAgICAgICAvLyBIZXJl IHdlIHdpbGwgY3JlYXRlIHRhYiBjb250cm9sIGZvciBjb25zdHJhaW50cworICAgICAgICAgIHR5 cGU6ICduZXN0ZWQnLCBjb250cm9sOiAndGFiJywgZ3JvdXA6IGdldHRleHQoJ0NvbnN0cmFpbnRz JyksCisgICAgICAgICAgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLAorICAgICAgICAgIHNjaGVt YTogW3sKKyAgICAgICAgICAgICAgaWQ6ICdwcmltYXJ5X2tleScsIGxhYmVsOiBnZXR0ZXh0KCdQ cmltYXJ5IGtleScpLAorICAgICAgICAgICAgICBtb2RlbDogcGdCcm93c2VyLk5vZGVzWydwcmlt YXJ5X2tleSddLm1vZGVsLAorICAgICAgICAgICAgICBzdWJub2RlOiBwZ0Jyb3dzZXIuTm9kZXNb J3ByaW1hcnlfa2V5J10ubW9kZWwsCisgICAgICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSwgdHlw ZTogJ2NvbGxlY3Rpb24nLAorICAgICAgICAgICAgICBncm91cDogZ2V0dGV4dCgnUHJpbWFyeSBL ZXknKSwgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLAorICAgICAgICAgICAgICBjYW5FZGl0OiB0 cnVlLCBjYW5EZWxldGU6IHRydWUsIGRlcHM6Wydpc19wYXJ0aXRpb25lZCddLAorICAgICAgICAg ICAgICBjb250cm9sOiAndW5pcXVlLWNvbC1jb2xsZWN0aW9uJywKKyAgICAgICAgICAgICAgY29s dW1ucyA6IFsnbmFtZScsICdjb2x1bW5zJ10sCisgICAgICAgICAgICAgIGNhbkFkZDogZnVuY3Rp b24obSkgeworICAgICAgICAgICAgICAgIGlmIChtLmdldCgnaXNfcGFydGl0aW9uZWQnKSkgewor ICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg ICAgICAgdmFyIGNvbGwgPSBtLmdldCgncHJpbWFyeV9rZXknKTsKKyAgICAgICAgICAgICAgICAg ICAgY29sbC5yZW1vdmUoY29sbC5maWx0ZXIoZnVuY3Rpb24obW9kZWwpIHsKKyAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAg ICAgICAgICAgICAgfSwgMTApOworICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg ICAgICB9LAorICAgICAgICAgICAgICBjYW5BZGRSb3c6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAg ICAgICAgIC8vIFVzZXIgY2FuIG9ubHkgYWRkIG9uZSBwcmltYXJ5IGtleQorICAgICAgICAgICAg ICAgdmFyIGNvbHVtbnMgPSBtLmdldCgnY29sdW1ucycpOworCisgICAgICAgICAgICAgICByZXR1 cm4gKG0uZ2V0KCdwcmltYXJ5X2tleScpICYmCisgICAgICAgICAgICAgICAgICAgICAgICBtLmdl dCgncHJpbWFyeV9rZXknKS5sZW5ndGggPCAxICYmCisgICAgICAgICAgICAgICAgICAgICAgICBf LnNvbWUoY29sdW1ucy5wbHVjaygnbmFtZScpKSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0seworICAgICAgICAgICAgICBpZDogJ2ZvcmVpZ25fa2V5JywgbGFiZWw6IGdldHRleHQo J0ZvcmVpZ24ga2V5JyksCisgICAgICAgICAgICAgIG1vZGVsOiBwZ0Jyb3dzZXIuTm9kZXNbJ2Zv cmVpZ25fa2V5J10ubW9kZWwsCisgICAgICAgICAgICAgIHN1Ym5vZGU6IHBnQnJvd3Nlci5Ob2Rl c1snZm9yZWlnbl9rZXknXS5tb2RlbCwKKyAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLCB0 eXBlOiAnY29sbGVjdGlvbicsCisgICAgICAgICAgICAgIGdyb3VwOiBnZXR0ZXh0KCdGb3JlaWdu IEtleScpLCBtb2RlOiBbJ2VkaXQnLCAnY3JlYXRlJ10sCisgICAgICAgICAgICAgIGNhbkVkaXQ6 IHRydWUsIGNhbkRlbGV0ZTogdHJ1ZSwgZGVwczpbJ2lzX3BhcnRpdGlvbmVkJ10sCisgICAgICAg ICAgICAgIGNvbnRyb2w6ICd1bmlxdWUtY29sLWNvbGxlY3Rpb24nLAorICAgICAgICAgICAgICBj YW5BZGQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgICAgICBpZiAobS5nZXQoJ2lzX3BhcnRp dGlvbmVkJykpIHsKKyAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Cisg ICAgICAgICAgICAgICAgICAgIHZhciBjb2xsID0gbS5nZXQoJ2ZvcmVpZ25fa2V5Jyk7CisgICAg ICAgICAgICAgICAgICAgIGNvbGwucmVtb3ZlKGNvbGwuZmlsdGVyKGZ1bmN0aW9uKG1vZGVsKSB7 CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAg IH0pKTsKKyAgICAgICAgICAgICAgICAgIH0sIDEwKTsKKyAgICAgICAgICAgICAgICAgIHJldHVy biBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1 ZTsKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgY29sdW1ucyA6IFsnbmFtZScsICdj b2x1bW5zJ10sCisgICAgICAgICAgICAgIGNhbkFkZFJvdzogZnVuY3Rpb24obSkgeworICAgICAg ICAgICAgICAgLy8gVXNlciBjYW4gb25seSBhZGQgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNv bHVtbiB3aXRoIG5hbWUuCisgICAgICAgICAgICAgICB2YXIgY29sdW1ucyA9IG0uZ2V0KCdjb2x1 bW5zJyk7CisgICAgICAgICAgICAgICByZXR1cm4gXy5zb21lKGNvbHVtbnMucGx1Y2soJ25hbWUn KSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0seworICAgICAgICAgICAgICBpZDog J2NoZWNrX2NvbnN0cmFpbnQnLCBsYWJlbDogZ2V0dGV4dCgnQ2hlY2sgY29uc3RyYWludCcpLAor ICAgICAgICAgICAgICBtb2RlbDogcGdCcm93c2VyLk5vZGVzWydjaGVja19jb25zdHJhaW50cydd Lm1vZGVsLAorICAgICAgICAgICAgICBzdWJub2RlOiBwZ0Jyb3dzZXIuTm9kZXNbJ2NoZWNrX2Nv bnN0cmFpbnRzJ10ubW9kZWwsCisgICAgICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSwgdHlwZTog J2NvbGxlY3Rpb24nLAorICAgICAgICAgICAgICBncm91cDogZ2V0dGV4dCgnQ2hlY2snKSwgbW9k ZTogWydlZGl0JywgJ2NyZWF0ZSddLAorICAgICAgICAgICAgICBjYW5FZGl0OiB0cnVlLCBjYW5E ZWxldGU6IHRydWUsIGRlcHM6Wydpc19wYXJ0aXRpb25lZCddLAorICAgICAgICAgICAgICBjb250 cm9sOiAndW5pcXVlLWNvbC1jb2xsZWN0aW9uJywKKyAgICAgICAgICAgICAgY2FuQWRkOiB0cnVl LAorICAgICAgICAgICAgICBjb2x1bW5zIDogWyduYW1lJywgJ2NvbnNyYyddCisgICAgICAgICAg ICB9LHsKKyAgICAgICAgICAgICAgaWQ6ICd1bmlxdWVfY29uc3RyYWludCcsIGxhYmVsOiBnZXR0 ZXh0KCdVbmlxdWUgQ29uc3RyYWludCcpLAorICAgICAgICAgICAgICBtb2RlbDogcGdCcm93c2Vy Lk5vZGVzWyd1bmlxdWVfY29uc3RyYWludCddLm1vZGVsLAorICAgICAgICAgICAgICBzdWJub2Rl OiBwZ0Jyb3dzZXIuTm9kZXNbJ3VuaXF1ZV9jb25zdHJhaW50J10ubW9kZWwsCisgICAgICAgICAg ICAgIGVkaXRhYmxlOiBmYWxzZSwgdHlwZTogJ2NvbGxlY3Rpb24nLAorICAgICAgICAgICAgICBn cm91cDogZ2V0dGV4dCgnVW5pcXVlJyksIG1vZGU6IFsnZWRpdCcsICdjcmVhdGUnXSwKKyAgICAg ICAgICAgICAgY2FuRWRpdDogdHJ1ZSwgY2FuRGVsZXRlOiB0cnVlLCBkZXBzOlsnaXNfcGFydGl0 aW9uZWQnXSwKKyAgICAgICAgICAgICAgY29udHJvbDogJ3VuaXF1ZS1jb2wtY29sbGVjdGlvbics CisgICAgICAgICAgICAgIGNvbHVtbnMgOiBbJ25hbWUnLCAnY29sdW1ucyddLAorICAgICAgICAg ICAgICBjYW5BZGQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgICAgICBpZiAobS5nZXQoJ2lz X3BhcnRpdGlvbmVkJykpIHsKKyAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjb2xsID0gbS5nZXQoJ3VuaXF1ZV9jb25zdHJh aW50Jyk7CisgICAgICAgICAgICAgICAgICAgIGNvbGwucmVtb3ZlKGNvbGwuZmlsdGVyKGZ1bmN0 aW9uKG1vZGVsKSB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg ICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICAgIH0sIDEwKTsKKyAgICAgICAgICAg ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgY2FuQWRkUm93 OiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICAgICAvLyBVc2VyIGNhbiBvbmx5IGFkZCBpZiB0 aGVyZSBpcyBhdCBsZWFzdCBvbmUgY29sdW1uIHdpdGggbmFtZS4KKyAgICAgICAgICAgICAgIHZh ciBjb2x1bW5zID0gbS5nZXQoJ2NvbHVtbnMnKTsKKyAgICAgICAgICAgICAgIHJldHVybiBfLnNv bWUoY29sdW1ucy5wbHVjaygnbmFtZScpKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fSx7CisgICAgICAgICAgICAgIGlkOiAnZXhjbHVkZV9jb25zdHJhaW50JywgbGFiZWw6IGdldHRl eHQoJ0V4Y2x1ZGUgY29uc3RyYWludCcpLAorICAgICAgICAgICAgICBtb2RlbDogcGdCcm93c2Vy Lk5vZGVzWydleGNsdXNpb25fY29uc3RyYWludCddLm1vZGVsLAorICAgICAgICAgICAgICBzdWJu b2RlOiBwZ0Jyb3dzZXIuTm9kZXNbJ2V4Y2x1c2lvbl9jb25zdHJhaW50J10ubW9kZWwsCisgICAg ICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSwgdHlwZTogJ2NvbGxlY3Rpb24nLAorICAgICAgICAg ICAgICBncm91cDogZ2V0dGV4dCgnRXhjbHVkZScpLCBtb2RlOiBbJ2VkaXQnLCAnY3JlYXRlJ10s CisgICAgICAgICAgICAgIGNhbkVkaXQ6IHRydWUsIGNhbkRlbGV0ZTogdHJ1ZSwgZGVwczpbJ2lz X3BhcnRpdGlvbmVkJ10sCisgICAgICAgICAgICAgIGNvbnRyb2w6ICd1bmlxdWUtY29sLWNvbGxl Y3Rpb24nLAorICAgICAgICAgICAgICBjb2x1bW5zIDogWyduYW1lJywgJ2NvbHVtbnMnLCAnY29u c3RyYWludCddLAorICAgICAgICAgICAgICBjYW5BZGQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAg ICAgICAgICBpZiAobS5nZXQoJ2lzX3BhcnRpdGlvbmVkJykpIHsKKyAgICAgICAgICAgICAgICAg IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjb2xsID0g bS5nZXQoJ2V4Y2x1ZGVfY29uc3RyYWludCcpOworICAgICAgICAgICAgICAgICAgICBjb2xsLnJl bW92ZShjb2xsLmZpbHRlcihmdW5jdGlvbihtb2RlbCkgeworICAgICAgICAgICAgICAgICAgICAg IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAgICAg ICB9LCAxMCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg ICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgIH0sCisg ICAgICAgICAgICAgIGNhbkFkZFJvdzogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgICAgLy8g VXNlciBjYW4gb25seSBhZGQgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNvbHVtbiB3aXRoIG5h bWUuCisgICAgICAgICAgICAgICB2YXIgY29sdW1ucyA9IG0uZ2V0KCdjb2x1bW5zJyk7CisgICAg ICAgICAgICAgICByZXR1cm4gXy5zb21lKGNvbHVtbnMucGx1Y2soJ25hbWUnKSk7CisgICAgICAg ICAgICAgIH0KKyAgICAgICAgICB9XQorICAgICAgICB9LHsKKyAgICAgICAgICBpZDogJ3R5cG5h bWUnLCBsYWJlbDogZ2V0dGV4dCgnT2YgdHlwZScpLCB0eXBlOiAndGV4dCcsCisgICAgICAgICAg Y29udHJvbDogJ25vZGUtYWpheC1vcHRpb25zJywgbW9kZTogWydwcm9wZXJ0aWVzJywgJ2NyZWF0 ZScsICdlZGl0J10sCisgICAgICAgICAgZGlzYWJsZWQ6ICdjaGVja09mVHlwZScsIHVybDogJ2dl dF9vZnR5cGUnLCBncm91cDogZ2V0dGV4dCgnQWR2YW5jZWQnKSwKKyAgICAgICAgICBkZXBzOiBb J2NvbGxfaW5oZXJpdHMnLCAnaXNfcGFydGl0aW9uZWQnXSwgdHJhbnNmb3JtOiBmdW5jdGlvbihk YXRhLCBjZWxsKSB7CisgICAgICAgICAgICB2YXIgY29udHJvbCA9IGNlbGwgfHwgdGhpcywKKyAg ICAgICAgICAgICAgbSA9IGNvbnRyb2wubW9kZWw7CisgICAgICAgICAgICAgIG0ub2ZfdHlwZXNf dGFibGVzID0gZGF0YTsKKyAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgfSwK KyAgICAgICAgICBjb250cm9sOiBCYWNrZm9ybS5Ob2RlQWpheE9wdGlvbnNDb250cm9sLmV4dGVu ZCh7CisgICAgICAgICAgICAgIC8vIFdoZW4gb2ZfdHlwZXMgY2hhbmdlcyB3ZSBuZWVkIHRvIGNs ZWFyIGNvbHVtbnMgY29sbGVjdGlvbgorICAgICAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24o KSB7CisgICAgICAgICAgICAgICAgQmFja2Zvcm0uTm9kZUFqYXhPcHRpb25zQ29udHJvbC5wcm90 b3R5cGUub25DaGFuZ2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICB2 YXIgc2VsZiA9IHRoaXMsCisgICAgICAgICAgICAgICAgICB0Ymxfb2lkID0gdW5kZWZpbmVkLAor ICAgICAgICAgICAgICAgICAgdGJsX25hbWUgPSBzZWxmLm1vZGVsLmdldCgndHlwbmFtZScpLAor ICAgICAgICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICAgIGFy ZyA9IHVuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICAgIGNvbHVtbl9jb2xsZWN0aW9uID0gc2Vs Zi5tb2RlbC5nZXQoJ2NvbHVtbnMnKTsKKworICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVm aW5lZCh0YmxfbmFtZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgdGJsX25hbWUgIT09ICcnICYm IGNvbHVtbl9jb2xsZWN0aW9uLmxlbmd0aCAhPT0gMCkgeworICAgICAgICAgICAgICAgICAgdmFy IG1zZyA9IGdldHRleHQoJ0NoYW5naW5nIG9mIHR5cGUgdGFibGUgd2lsbCBjbGVhciBjb2x1bW5z IGNvbGxlY3Rpb24nKTsKKyAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmNvbmZpcm0obXNnLCBm dW5jdGlvbiAoZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZSkgeworICAgICAgICAgICAg ICAgICAgICAgIC8vIFVzZXIgY2xpY2tzIE9rLCBsZXRzIGNsZWFyIGNvbHVtbnMgY29sbGVjdGlv bgorICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl9jb2xsZWN0aW9uLnJlc2V0KCk7CisgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo aXM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0pOworICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoIV8uaXNVbmRlZmluZWQodGJsX25hbWUpICYmIHRibF9uYW1l ID09PSAnJykgeworICAgICAgICAgICAgICAgICAgY29sdW1uX2NvbGxlY3Rpb24ucmVzZXQoKTsK KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBSdW4gQWpheCBub3cgdG8g ZmV0Y2ggY29sdW1ucworICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh0YmxfbmFt ZSkgJiYgdGJsX25hbWUgIT09ICcnKSB7CisgICAgICAgICAgICAgICAgICBhcmcgPSB7ICd0bmFt ZSc6IHRibF9uYW1lIH0KKyAgICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLm1vZGVsLmZldGNo X2NvbHVtbnNfYWpheC5hcHBseShzZWxmLCBbYXJnXSk7CisgICAgICAgICAgICAgICAgICAvLyBB ZGQgaW50byBjb2x1bW4gY29sbGVjdGlvbgorICAgICAgICAgICAgICAgICAgY29sdW1uX2NvbGxl Y3Rpb24uc2V0KGRhdGEsIHsgbWVyZ2U6ZmFsc2UscmVtb3ZlOmZhbHNlIH0pOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSkKKyAgICAgICAgfSx7Cisg ICAgICAgICAgaWQ6ICdmaWxsZmFjdG9yJywgbGFiZWw6IGdldHRleHQoJ0ZpbGwgZmFjdG9yJyks IHR5cGU6ICdpbnQnLAorICAgICAgICAgIG1vZGU6IFsnY3JlYXRlJywgJ2VkaXQnXSwgbWluOiAx MCwgbWF4OiAxMDAsCisgICAgICAgICAgZGlzYWJsZWQ6ICdpblNjaGVtYScsZ3JvdXA6IGdldHRl eHQoJ0FkdmFuY2VkJykKKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdyZWxoYXNvaWRzJywg bGFiZWw6IGdldHRleHQoJ0hhcyBPSURzPycpLCBjZWxsOiAnc3dpdGNoJywKKyAgICAgICAgICB0 eXBlOiAnc3dpdGNoJywgbW9kZTogWydwcm9wZXJ0aWVzJywgJ2NyZWF0ZScsICdlZGl0J10sCisg ICAgICAgICAgZGlzYWJsZWQ6ICdpblNjaGVtYScsIGdyb3VwOiBnZXR0ZXh0KCdBZHZhbmNlZCcp CisgICAgICAgIH0seworICAgICAgICAgIGlkOiAncmVscGVyc2lzdGVuY2UnLCBsYWJlbDogZ2V0 dGV4dCgnVW5sb2dnZWQ/JyksIGNlbGw6ICdzd2l0Y2gnLAorICAgICAgICAgIHR5cGU6ICdzd2l0 Y2gnLCBtb2RlOiBbJ3Byb3BlcnRpZXMnLCAnY3JlYXRlJywgJ2VkaXQnXSwKKyAgICAgICAgICBk aXNhYmxlZDogJ2luU2NoZW1hV2l0aE1vZGVsQ2hlY2snLAorICAgICAgICAgIGdyb3VwOiBnZXR0 ZXh0KCdBZHZhbmNlZCcpCisgICAgICAgIH0seworICAgICAgICAgIGlkOiAnY29ubmFtZScsIGxh YmVsOiBnZXR0ZXh0KCdQcmltYXJ5IGtleScpLCBjZWxsOiAnc3RyaW5nJywKKyAgICAgICAgICB0 eXBlOiAndGV4dCcsIG1vZGU6IFsncHJvcGVydGllcyddLCBncm91cDogZ2V0dGV4dCgnQWR2YW5j ZWQnKSwKKyAgICAgICAgICBkaXNhYmxlZDogJ2luU2NoZW1hJworICAgICAgICB9LHsKKyAgICAg ICAgICBpZDogJ3JlbHR1cGxlcycsIGxhYmVsOiBnZXR0ZXh0KCdSb3dzIChlc3RpbWF0ZWQpJyks IGNlbGw6ICdzdHJpbmcnLAorICAgICAgICAgIHR5cGU6ICd0ZXh0JywgbW9kZTogWydwcm9wZXJ0 aWVzJ10sIGdyb3VwOiBnZXR0ZXh0KCdBZHZhbmNlZCcpLAorICAgICAgICAgIGRpc2FibGVkOiAn aW5TY2hlbWEnCisgICAgICAgIH0seworICAgICAgICAgIGlkOiAncm93c19jbnQnLCBsYWJlbDog Z2V0dGV4dCgnUm93cyAoY291bnRlZCknKSwgY2VsbDogJ3N0cmluZycsCisgICAgICAgICAgdHlw ZTogJ3RleHQnLCBtb2RlOiBbJ3Byb3BlcnRpZXMnXSwgZ3JvdXA6IGdldHRleHQoJ0FkdmFuY2Vk JyksCisgICAgICAgICAgZGlzYWJsZWQ6ICdpblNjaGVtYScKKyAgICAgICAgfSx7CisgICAgICAg ICAgaWQ6ICdyZWxoYXNzdWJjbGFzcycsIGxhYmVsOiBnZXR0ZXh0KCdJbmhlcml0cyB0YWJsZXM/ JyksIGNlbGw6ICdzd2l0Y2gnLAorICAgICAgICAgIHR5cGU6ICdzd2l0Y2gnLCBtb2RlOiBbJ3By b3BlcnRpZXMnXSwgZ3JvdXA6IGdldHRleHQoJ0FkdmFuY2VkJyksCisgICAgICAgICAgZGlzYWJs ZWQ6ICdpblNjaGVtYScKKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdpc19zeXNfdGFibGUn LCBsYWJlbDogZ2V0dGV4dCgnU3lzdGVtIHRhYmxlPycpLCBjZWxsOiAnc3dpdGNoJywKKyAgICAg ICAgICB0eXBlOiAnc3dpdGNoJywgbW9kZTogWydwcm9wZXJ0aWVzJ10sCisgICAgICAgICAgZGlz YWJsZWQ6ICdpblNjaGVtYScKKyAgICAgICAgfSx7CisgICAgICAgICAgdHlwZTogJ25lc3RlZCcs IGNvbnRyb2w6ICdmaWVsZHNldCcsIGxhYmVsOiBnZXR0ZXh0KCdMaWtlJyksCisgICAgICAgICAg Z3JvdXA6IGdldHRleHQoJ0FkdmFuY2VkJyksCisgICAgICAgICAgc2NoZW1hOlt7CisgICAgICAg ICAgICBpZDogJ2xpa2VfcmVsYXRpb24nLCBsYWJlbDogZ2V0dGV4dCgnUmVsYXRpb24nKSwKKyAg ICAgICAgICAgIHR5cGU6ICd0ZXh0JywgbW9kZTogWydjcmVhdGUnLCAnZWRpdCddLCBkZXBzOiBb J3R5cG5hbWUnXSwKKyAgICAgICAgICAgIGNvbnRyb2w6ICdub2RlLWFqYXgtb3B0aW9ucycsIHVy bDogJ2dldF9yZWxhdGlvbnMnLAorICAgICAgICAgICAgZGlzYWJsZWQ6ICdpc0xpa2VEaXNhYmxl JywgZ3JvdXA6IGdldHRleHQoJ0xpa2UnKQorICAgICAgICAgIH0seworICAgICAgICAgICAgaWQ6 ICdsaWtlX2RlZmF1bHRfdmFsdWUnLCBsYWJlbDogZ2V0dGV4dCgnV2l0aCBkZWZhdWx0IHZhbHVl cz8nKSwKKyAgICAgICAgICAgIHR5cGU6ICdzd2l0Y2gnLCBtb2RlOiBbJ2NyZWF0ZScsICdlZGl0 J10sIGRlcHM6IFsndHlwbmFtZSddLAorICAgICAgICAgICAgZGlzYWJsZWQ6ICdpc0xpa2VEaXNh YmxlJywgZ3JvdXA6IGdldHRleHQoJ0xpa2UnKQorICAgICAgICAgIH0seworICAgICAgICAgICAg aWQ6ICdsaWtlX2NvbnN0cmFpbnRzJywgbGFiZWw6IGdldHRleHQoJ1dpdGggY29uc3RyYWludHM/ JyksCisgICAgICAgICAgICB0eXBlOiAnc3dpdGNoJywgbW9kZTogWydjcmVhdGUnLCAnZWRpdCdd LCBkZXBzOiBbJ3R5cG5hbWUnXSwKKyAgICAgICAgICAgIGRpc2FibGVkOiAnaXNMaWtlRGlzYWJs ZScsIGdyb3VwOiBnZXR0ZXh0KCdMaWtlJykKKyAgICAgICAgICB9LHsKKyAgICAgICAgICAgIGlk OiAnbGlrZV9pbmRleGVzJywgbGFiZWw6IGdldHRleHQoJ1dpdGggaW5kZXhlcz8nKSwKKyAgICAg ICAgICAgIHR5cGU6ICdzd2l0Y2gnLCBtb2RlOiBbJ2NyZWF0ZScsICdlZGl0J10sIGRlcHM6IFsn dHlwbmFtZSddLAorICAgICAgICAgICAgZGlzYWJsZWQ6ICdpc0xpa2VEaXNhYmxlJywgZ3JvdXA6 IGdldHRleHQoJ0xpa2UnKQorICAgICAgICAgIH0seworICAgICAgICAgICAgaWQ6ICdsaWtlX3N0 b3JhZ2UnLCBsYWJlbDogZ2V0dGV4dCgnV2l0aCBzdG9yYWdlPycpLAorICAgICAgICAgICAgdHlw ZTogJ3N3aXRjaCcsIG1vZGU6IFsnY3JlYXRlJywgJ2VkaXQnXSwgZGVwczogWyd0eXBuYW1lJ10s CisgICAgICAgICAgICBkaXNhYmxlZDogJ2lzTGlrZURpc2FibGUnLCBncm91cDogZ2V0dGV4dCgn TGlrZScpCisgICAgICAgICAgfSx7CisgICAgICAgICAgICBpZDogJ2xpa2VfY29tbWVudHMnLCBs YWJlbDogZ2V0dGV4dCgnV2l0aCBjb21tZW50cz8nKSwKKyAgICAgICAgICAgIHR5cGU6ICdzd2l0 Y2gnLCBtb2RlOiBbJ2NyZWF0ZScsICdlZGl0J10sIGRlcHM6IFsndHlwbmFtZSddLAorICAgICAg ICAgICAgZGlzYWJsZWQ6ICdpc0xpa2VEaXNhYmxlJywgZ3JvdXA6IGdldHRleHQoJ0xpa2UnKQor ICAgICAgICAgIH1dCisgICAgICAgIH0seworICAgICAgICAgIGlkOiAncGFydGl0aW9uX3R5cGUn LCBsYWJlbDpnZXR0ZXh0KCdQYXJ0aXRpb24gVHlwZScpLAorICAgICAgICAgIGVkaXRhYmxlOiBm YWxzZSwgdHlwZTogJ3NlbGVjdDInLCBzZWxlY3QyOiB7YWxsb3dDbGVhcjogZmFsc2V9LAorICAg ICAgICAgIGdyb3VwOiAncGFydGl0aW9uJywgZGVwczogWydpc19wYXJ0aXRpb25lZCddLAorICAg ICAgICAgIG9wdGlvbnM6W3sKKyAgICAgICAgICAgIGxhYmVsOiAnUmFuZ2UnLCB2YWx1ZTogJ3Jh bmdlJworICAgICAgICAgIH0seworICAgICAgICAgICAgbGFiZWw6ICdMaXN0JywgdmFsdWU6ICds aXN0JworICAgICAgICAgIH1dLAorICAgICAgICAgIG1vZGU6WydjcmVhdGUnXSwKKyAgICAgICAg ICB2aXNpYmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBpZighXy5pc1VuZGVmaW5lZCht Lm5vZGVfaW5mbykgJiYgIV8uaXNVbmRlZmluZWQobS5ub2RlX2luZm8uc2VydmVyKQorICAgICAg ICAgICAgICAmJiAhXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lvbikgJiYK KyAgICAgICAgICAgICAgbS5ub2RlX2luZm8uc2VydmVyLnZlcnNpb24gPj0gMTAwMDAwKQorICAg ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg ICAgICAgIH0sCisgICAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAg IGlmICghbS5pc05ldygpIHx8ICFtLmdldCgnaXNfcGFydGl0aW9uZWQnKSkKKyAgICAgICAgICAg ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQor ICAgICAgICB9LHsKKyAgICAgICAgICBpZDogJ3BhcnRpdGlvbl9rZXlzJywgbGFiZWw6Z2V0dGV4 dCgnUGFydGl0aW9uIEtleXMnKSwKKyAgICAgICAgICBtb2RlbDogQmFja2Zvcm0uUGFydGl0aW9u S2V5TW9kZWwsCisgICAgICAgICAgc3Vibm9kZTogQmFja2Zvcm0uUGFydGl0aW9uS2V5TW9kZWws CisgICAgICAgICAgZWRpdGFibGU6IHRydWUsIHR5cGU6ICdjb2xsZWN0aW9uJywKKyAgICAgICAg ICBncm91cDogJ3BhcnRpdGlvbicsIG1vZGU6IFsnY3JlYXRlJ10sCisgICAgICAgICAgZGVwczog Wydpc19wYXJ0aXRpb25lZCcsICdwYXJ0aXRpb25fdHlwZSddLAorICAgICAgICAgIGNhbkVkaXQ6 IGZhbHNlLCBjYW5EZWxldGU6IHRydWUsCisgICAgICAgICAgY29udHJvbDogJ3N1Yi1ub2RlLWNv bGxlY3Rpb24nLAorICAgICAgICAgIGNhbkFkZDogZnVuY3Rpb24obSkgeworICAgICAgICAgICAg aWYgKG0uaXNOZXcoKSAmJiBtLmdldCgnaXNfcGFydGl0aW9uZWQnKSkKKyAgICAgICAgICAgICAg cmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfSwKKyAg ICAgICAgICBjYW5BZGRSb3c6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIHZhciBjb2x1bW5z ID0gbS5nZXQoJ2NvbHVtbnMnKTsKKyAgICAgICAgICAgIHZhciBtYXhfcm93X2NvdW50ID0gMTAw MDsKKworICAgICAgICAgICAgaWYgKG0uZ2V0KCdwYXJ0aXRpb25fdHlwZScpICYmIG0uZ2V0KCdw YXJ0aXRpb25fdHlwZScpID09ICdsaXN0JykKKyAgICAgICAgICAgICAgbWF4X3Jvd19jb3VudCA9 IDE7CisKKyAgICAgICAgICAgIHJldHVybiAobS5nZXQoJ3BhcnRpdGlvbl9rZXlzJykgJiYKKyAg ICAgICAgICAgICAgICBtLmdldCgncGFydGl0aW9uX2tleXMnKS5sZW5ndGggPCBtYXhfcm93X2Nv dW50ICYmCisgICAgICAgICAgICAgICAgXy5zb21lKGNvbHVtbnMucGx1Y2soJ25hbWUnKSkKKyAg ICAgICAgICAgICk7CisgICAgICAgICAgfSwKKyAgICAgICAgICB2aXNpYmxlOiBmdW5jdGlvbiht KSB7CisgICAgICAgICAgICBpZighXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mbykgJiYgIV8uaXNV bmRlZmluZWQobS5ub2RlX2luZm8uc2VydmVyKQorICAgICAgICAgICAgICAmJiAhXy5pc1VuZGVm aW5lZChtLm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lvbikgJiYKKyAgICAgICAgICAgICAgbS5ub2Rl X2luZm8uc2VydmVyLnZlcnNpb24gPj0gMTAwMDAwKQorICAgICAgICAgICAgICByZXR1cm4gdHJ1 ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0sCisgICAgICAgICAg ZGlzYWJsZWQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmIChtLmdldCgncGFydGl0aW9u X2tleXMnKSAmJiBtLmdldCgncGFydGl0aW9uX2tleXMnKS5tb2RlbHMubGVuZ3RoID4gMCkgewor ICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB2 YXIgY29sbCA9IG0uZ2V0KCdwYXJ0aXRpb25fa2V5cycpOworICAgICAgICAgICAgICAgIGNvbGwu cmVtb3ZlKGNvbGwuZmlsdGVyKGZ1bmN0aW9uKG1vZGVsKSB7CisgICAgICAgICAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAgIH0sIDEwKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0seworICAgICAgICAgIGlkOiAn cGFydGl0aW9uX3NjaGVtZScsIGxhYmVsOiBnZXR0ZXh0KCdQYXJ0aXRpb24gU2NoZW1lJyksCisg ICAgICAgICAgdHlwZTogJ25vdGUnLCBncm91cDogJ3BhcnRpdGlvbicsIG1vZGU6IFsnZWRpdCdd LAorICAgICAgICAgIHZpc2libGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmKCFfLmlz VW5kZWZpbmVkKG0ubm9kZV9pbmZvKSAmJiAhXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mby5zZXJ2 ZXIpCisgICAgICAgICAgICAgICYmICFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvLnNlcnZlci52 ZXJzaW9uKSAmJgorICAgICAgICAgICAgICBtLm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lvbiA+PSAx MDAwMDApCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICByZXR1cm4g ZmFsc2U7CisgICAgICAgICAgfSwKKyAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24obSkgewor ICAgICAgICAgICAgaWYgKCFtLmlzTmV3KCkpIHsKKyAgICAgICAgICAgICAgdGhpcy50ZXh0ID0g bS5nZXQoJ3BhcnRpdGlvbl9zY2hlbWUnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9Cisg ICAgICAgIH0seworICAgICAgICAgIGlkOiAncGFydGl0aW9ucycsIGxhYmVsOmdldHRleHQoJ1Bh cnRpdGlvbnMnKSwKKyAgICAgICAgICBtb2RlbDogQmFja2Zvcm0uUGFydGl0aW9uc01vZGVsLAor ICAgICAgICAgIHN1Ym5vZGU6IEJhY2tmb3JtLlBhcnRpdGlvbnNNb2RlbCwKKyAgICAgICAgICBl ZGl0YWJsZTogdHJ1ZSwgdHlwZTogJ2NvbGxlY3Rpb24nLAorICAgICAgICAgIGdyb3VwOiAncGFy dGl0aW9uJywgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLAorICAgICAgICAgIGRlcHM6IFsnaXNf cGFydGl0aW9uZWQnLCAncGFydGl0aW9uX3R5cGUnXSwKKyAgICAgICAgICBjYW5FZGl0OiBmYWxz ZSwgY2FuRGVsZXRlOiB0cnVlLAorICAgICAgICAgIGN1c3RvbURlbGV0ZVRpdGxlOiBnZXR0ZXh0 KCdEZXRhY2ggUGFydGl0aW9uJyksCisgICAgICAgICAgY3VzdG9tRGVsZXRlTXNnOiBnZXR0ZXh0 KCdBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gZGV0YWNoIHRoaXMgcGFydGl0aW9uPycpLAorICAg ICAgICAgIGNvbHVtbnM6Wydpc19hdHRhY2gnLCAncGFydGl0aW9uX25hbWUnLCAndmFsdWVzX2Zy b20nLCAndmFsdWVzX3RvJywgJ3ZhbHVlc19pbiddLAorICAgICAgICAgIGNvbnRyb2w6IEJhY2tm b3JtLlN1Yk5vZGVDb2xsZWN0aW9uQ29udHJvbC5leHRlbmQoeworICAgICAgICAgICAgcm93OiBC YWNrZ3JpZC5QYXJ0aXRpb25Sb3csCisgICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbigp IHsKKyAgICAgICAgICAgICAgQmFja2Zvcm0uU3ViTm9kZUNvbGxlY3Rpb25Db250cm9sLnByb3Rv dHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICAgIHZh ciBzZWxmID0gdGhpczsKKyAgICAgICAgICAgICAgaWYgKCF0aGlzLm1vZGVsLmlzTmV3KCkpIHsK KyAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuZmllbGQuZ2V0KCdzY2hlbWFfbm9kZScp LAorICAgICAgICAgICAgICAgICAgICBub2RlX2luZm8gPSB0aGlzLmZpZWxkLmdldCgnbm9kZV9p bmZvJyk7CisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIGFqYXggY2FsbCB0byBnZXQgdGhlIHRh YmxlcyB0byBiZSBhdHRhY2hlZAorICAgICAgICAgICAgICAgICQuYWpheCh7CisgICAgICAgICAg ICAgICAgICB1cmw6IG5vZGUuZ2VuZXJhdGVfdXJsLmFwcGx5KAorICAgICAgICAgICAgICAgICAg ICAgIG5vZGUsIFsKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsICdnZXRfYXR0YWNoX3Rh YmxlcycsIHRoaXMuZmllbGQuZ2V0KCdub2RlX2RhdGEnKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgIHRydWUsIG5vZGVfaW5mbworICAgICAgICAgICAgICAgICAgICAgIF0pLAorCisgICAgICAg ICAgICAgICAgICB0eXBlOiAnR0VUJywKKyAgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwK KyAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgeworICAgICAgICAgICAg ICAgICAgICBpZiAocmVzLnN1Y2Nlc3MgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgIHNl bGYubW9kZWwudGFibGVfb3B0aW9ucyA9IHJlcy5kYXRhOworICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0 aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgJ0Vycm9yIGZldGNoaW5nIHRhYmxl cyB0byBiZSBhdHRhY2hlZCcsIHJlcy5kYXRhLnJlc3VsdAorICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAg ICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgICAgICAgICB2YXIg ZXJybXNnID0gJC5wYXJzZUpTT04oZS5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgICAgICAg ICBhbGVydGlmeS5hbGVydCgnRXJyb3IgZmV0Y2hpbmcgdGFibGVzIHRvIGJlIGF0dGFjaGVkLics IGVycm1zZy5lcnJvcm1zZyk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAg ICAgKSwKKyAgICAgICAgICBjYW5BZGQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmICht LmdldCgnaXNfcGFydGl0aW9uZWQnKSkKKyAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfSwKKyAgICAgICAgICB2aXNpYmxlOiBm dW5jdGlvbihtKSB7CisgICAgICAgICAgICBpZighXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mbykg JiYgIV8uaXNVbmRlZmluZWQobS5ub2RlX2luZm8uc2VydmVyKQorICAgICAgICAgICAgICAmJiAh Xy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lvbikgJiYKKyAgICAgICAgICAg ICAgbS5ub2RlX2luZm8uc2VydmVyLnZlcnNpb24gPj0gMTAwMDAwKQorICAgICAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0sCisg ICAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmIChtLmlzTmV3 KCkgJiYgbS5nZXQoJ3BhcnRpdGlvbnMnKSAmJiBtLmdldCgncGFydGl0aW9ucycpLm1vZGVscy5s ZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAg ICAgICAgICAgICAgIHZhciBjb2xsID0gbS5nZXQoJ3BhcnRpdGlvbnMnKTsKKyAgICAgICAgICAg ICAgICBjb2xsLnJlbW92ZShjb2xsLmZpbHRlcihmdW5jdGlvbihtb2RlbCkgeworICAgICAgICAg ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAg ICB9LCAxMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9LHsKKyAgICAg ICAgICBpZDogJ3BhcnRpdGlvbl9ub3RlJywgbGFiZWw6IGdldHRleHQoJ1BhcnRpdGlvbicpLAor ICAgICAgICAgIHR5cGU6ICdub3RlJywgZ3JvdXA6ICdwYXJ0aXRpb24nLAorICAgICAgICAgIHRl eHQ6IGdldHRleHQoJ0Fib3ZlIGNvbnRyb2wgd2lsbCBiZSB1c2VkIHRvIENyZWF0ZS9BdHRhY2gv RGV0YWNoIHBhcnRpdGlvbnMuPGJyPicgKworICAgICAgICAgICAgJzx1bD48bGk+Q3JlYXRlIE1v ZGU6IFVzZXIgd2lsbCBiZSBhYmxlIHRvIGNyZWF0ZSBOIG51bWJlciBvZiBwYXJ0aXRpb25zLiBN b2RlIHN3aXRjaCBjb250cm9sIGlzIGRpc2FibGVkIGluIHRoaXMgc2NlbmFyaW8uPC9saT4nICsK KyAgICAgICAgICAgICc8bGk+RWRpdCBNb2RlOiBVc2VyIHdpbGwgYmUgYWJsZSB0byBjcmVhdGUv YXR0YWNoL2RldGFjaCBOIG51bWJlciBvZiBwYXJ0aXRpb25zLicgKworICAgICAgICAgICAgJ0lu IGF0dGFjaCBtb2RlIHRoZXJlIHdpbGwgYmUgbGlzdCBvZiBzdWl0YWJsZSB0YWJsZXMgdG8gYmUg YXR0YWNoZWQuPC9saT48L3VsPicpLAorICAgICAgICAgIHZpc2libGU6IGZ1bmN0aW9uKG0pIHsK KyAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvKSAmJiAhXy5pc1VuZGVm aW5lZChtLm5vZGVfaW5mby5zZXJ2ZXIpCisgICAgICAgICAgICAgICYmICFfLmlzVW5kZWZpbmVk KG0ubm9kZV9pbmZvLnNlcnZlci52ZXJzaW9uKSAmJgorICAgICAgICAgICAgICBtLm5vZGVfaW5m by5zZXJ2ZXIudmVyc2lvbiA+PSAxMDAwMDApCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICB9LHsKKyAg ICAgICAgICAvLyBIZXJlIC0gd2Ugd2lsbCBjcmVhdGUgdGFiIGNvbnRyb2wgZm9yIHN0b3JhZ2Ug cGFyYW1ldGVycworICAgICAgICAgIC8vIChhdXRvIHZhY3V1bSkuCisgICAgICAgICAgdHlwZTog J25lc3RlZCcsIGNvbnRyb2w6ICd0YWInLCBncm91cDogZ2V0dGV4dCgnUGFyYW1ldGVyJyksCisg ICAgICAgICAgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLCBkZXBzOiBbJ2lzX3BhcnRpdGlvbmVk J10sCisgICAgICAgICAgc2NoZW1hOiBCYWNrZm9ybS5WYWN1dW1TZXR0aW5nc1NjaGVtYQorICAg ICAgICB9LHsKKyAgICAgICAgICBpZDogJ3JlbGFjbF9zdHInLCBsYWJlbDogZ2V0dGV4dCgnUHJp dmlsZWdlcycpLCBkaXNhYmxlZDogJ2luU2NoZW1hJywKKyAgICAgICAgICB0eXBlOiAndGV4dCcs IG1vZGU6IFsncHJvcGVydGllcyddLCBncm91cDogZ2V0dGV4dCgnU2VjdXJpdHknKQorICAgICAg ICB9LCBwZ0Jyb3dzZXIuU2VjdXJpdHlHcm91cFVuZGVyU2NoZW1hLHsKKyAgICAgICAgICBpZDog J3JlbGFjbCcsIGxhYmVsOiBnZXR0ZXh0KCdQcml2aWxlZ2VzJyksIHR5cGU6ICdjb2xsZWN0aW9u JywKKyAgICAgICAgICBncm91cDogJ3NlY3VyaXR5JywgY29udHJvbDogJ3VuaXF1ZS1jb2wtY29s bGVjdGlvbicsCisgICAgICAgICAgbW9kZWw6IHBnQnJvd3Nlci5Ob2RlLlByaXZpbGVnZVJvbGVN b2RlbC5leHRlbmQoeworICAgICAgICAgIHByaXZpbGVnZXM6IFsnYScsJ3InLCd3JywnZCcsJ0Qn LCd4JywndCddfSksCisgICAgICAgICAgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLCBjYW5BZGQ6 IHRydWUsIGNhbkRlbGV0ZTogdHJ1ZSwKKyAgICAgICAgICB1bmlxdWVDb2wgOiBbJ2dyYW50ZWUn XQorICAgICAgICB9LHsKKyAgICAgICAgICBpZDogJ3NlY2xhYmVscycsIGxhYmVsOiBnZXR0ZXh0 KCdTZWN1cml0eSBsYWJlbHMnKSwgY2FuRWRpdDogZmFsc2UsCisgICAgICAgICAgbW9kZWw6IHBn QnJvd3Nlci5TZWNMYWJlbE1vZGVsLCBlZGl0YWJsZTogZmFsc2UsIGNhbkFkZDogdHJ1ZSwKKyAg ICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsIG1pbl92ZXJzaW9uOiA5MDEwMCwgbW9kZTogWydl ZGl0JywgJ2NyZWF0ZSddLAorICAgICAgICAgIGdyb3VwOiAnc2VjdXJpdHknLCBjYW5EZWxldGU6 IHRydWUsIGNvbnRyb2w6ICd1bmlxdWUtY29sLWNvbGxlY3Rpb24nCisgICAgICAgIH0seworICAg ICAgICAgIGlkOiAndmFjdXVtX3NldHRpbmdzX3N0cicsIGxhYmVsOiBnZXR0ZXh0KCdTdG9yYWdl IHNldHRpbmdzJyksCisgICAgICAgICAgdHlwZTogJ211bHRpbGluZScsIGdyb3VwOiBnZXR0ZXh0 KCdBZHZhbmNlZCcpLCBtb2RlOiBbJ3Byb3BlcnRpZXMnXQorICAgICAgICB9XSwKKyAgICAgICAg dmFsaWRhdGU6IGZ1bmN0aW9uKGtleXMpIHsKKyAgICAgICAgICB2YXIgZXJyID0ge30sCisgICAg ICAgICAgICAgIGNoYW5nZWRBdHRycyA9IHRoaXMuY2hhbmdlZCwKKyAgICAgICAgICAgICAgbXNn ID0gdW5kZWZpbmVkLAorICAgICAgICAgICAgICBuYW1lID0gdGhpcy5nZXQoJ25hbWUnKSwKKyAg ICAgICAgICAgICAgc2NoZW1hID0gdGhpcy5nZXQoJ3NjaGVtYScpLAorICAgICAgICAgICAgICBy ZWxvd25lciA9IHRoaXMuZ2V0KCdyZWxvd25lcicpLAorICAgICAgICAgICAgICBpc19wYXJ0aXRp b25lZCA9IHRoaXMuZ2V0KCdpc19wYXJ0aXRpb25lZCcpLAorICAgICAgICAgICAgICBwYXJ0aXRp b25fa2V5cyA9IHRoaXMuZ2V0KCdwYXJ0aXRpb25fa2V5cycpOworCisgICAgICAgICAgLy8gSWYg bm90aGluZyB0byB2YWxpZGF0ZSBvciBWYWN1dW1TZXR0aW5nIGtleXMgdGhlbgorICAgICAgICAg IC8vIHJldHVybiBmcm9tIGhlcmUKKyAgICAgICAgICBpZiAoIGtleXMgJiYgKGtleXMubGVuZ3Ro ID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IF8uaW5kZXhPZihrZXlzLCAnYXV0b3Zh Y3V1bV9lbmFibGVkJykgIT0gLTEKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IF8uaW5kZXhP ZihrZXlzLCAndG9hc3RfYXV0b3ZhY3V1bV9lbmFibGVkJykgIT0gLTEpICkgeworICAgICAgICAg ICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgfQorCisgICAgICAgICAgLy8gSGF2ZSB0byBjbGVh ciBleGlzdGluZyB2YWxpZGF0aW9uIGJlZm9yZSBpbml0aWF0aW5nIGN1cnJlbnQgc3RhdGUgdmFs aWRhdGlvbiBvbmx5CisgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLmNsZWFyKCk7CisKKyAgICAg ICAgICBpZiAoXy5pc1VuZGVmaW5lZChuYW1lKSB8fCBfLmlzTnVsbChuYW1lKSB8fAorICAgICAg ICAgICAgU3RyaW5nKG5hbWUpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykgPT0gJycpIHsKKyAg ICAgICAgICAgIG1zZyA9IGdldHRleHQoJ1RhYmxlIG5hbWUgY2Fubm90IGJlIGVtcHR5LicpOwor ICAgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgnbmFtZScsIG1zZyk7CisgICAgICAgICAg ICByZXR1cm4gbXNnOworICAgICAgICAgIH0gZWxzZSBpZiAoXy5pc1VuZGVmaW5lZChzY2hlbWEp IHx8IF8uaXNOdWxsKHNjaGVtYSkgfHwKKyAgICAgICAgICAgIFN0cmluZyhzY2hlbWEpLnJlcGxh Y2UoL15ccyt8XHMrJC9nLCAnJykgPT0gJycpIHsKKyAgICAgICAgICAgIG1zZyA9IGdldHRleHQo J1RhYmxlIHNjaGVtYSBjYW5ub3QgYmUgZW1wdHkuJyk7CisgICAgICAgICAgICB0aGlzLmVycm9y TW9kZWwuc2V0KCdzY2hlbWEnLCBtc2cpOworICAgICAgICAgICAgcmV0dXJuIG1zZzsKKyAgICAg ICAgICB9IGVsc2UgaWYgKF8uaXNVbmRlZmluZWQocmVsb3duZXIpIHx8IF8uaXNOdWxsKHJlbG93 bmVyKSB8fAorICAgICAgICAgICAgU3RyaW5nKHJlbG93bmVyKS5yZXBsYWNlKC9eXHMrfFxzKyQv ZywgJycpID09ICcnKSB7CisgICAgICAgICAgICBtc2cgPSBnZXR0ZXh0KCdUYWJsZSBvd25lciBj YW5ub3QgYmUgZW1wdHkuJyk7CisgICAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCdyZWxv d25lcicsIG1zZyk7CisgICAgICAgICAgICByZXR1cm4gbXNnOworICAgICAgICAgIH0gZWxzZSBp ZiAoaXNfcGFydGl0aW9uZWQgJiYgdGhpcy5pc05ldygpICYmCisgICAgICAgICAgICAhXy5pc051 bGwocGFydGl0aW9uX2tleXMpICYmIHBhcnRpdGlvbl9rZXlzLmxlbmd0aCA8PSAwKQorICAgICAg ICAgIHsKKyAgICAgICAgICAgIG1zZyA9IGdldHRleHQoJ1BsZWFzZSBzcGVjaWZ5IGF0IGxlYXN0 IG9uZSBrZXkgZm9yIHBhcnRpdGlvbmVkIHRhYmxlLicpOworICAgICAgICAgICAgdGhpcy5lcnJv ck1vZGVsLnNldCgncGFydGl0aW9uX2tleXMnLCBtc2cpOworICAgICAgICAgICAgcmV0dXJuIG1z ZzsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0sCisgICAg ICAgIC8vIFdlIHdpbGwgZGlzYWJsZSBldmVyeXRoaW5nIGlmIHdlIGFyZSB1bmRlciBjYXRhbG9n IG5vZGUKKyAgICAgICAgaW5TY2hlbWE6IGZ1bmN0aW9uKCkgeworICAgICAgICAgIGlmKHRoaXMu bm9kZV9pbmZvICYmICAnY2F0YWxvZycgaW4gdGhpcy5ub2RlX2luZm8pCisgICAgICAgICAgewor ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBm YWxzZTsKKyAgICAgICAgfSwKKyAgICAgICAgaXNJbmhlcml0ZWRUYWJsZTogZnVuY3Rpb24obSkg eworICAgICAgICAgIGlmKCFtLmluU2NoZW1hLmFwcGx5KHRoaXMsIFttXSkpIHsKKyAgICAgICAg ICAgIGlmKAorICAgICAgICAgICAgICAoIV8uaXNVbmRlZmluZWQobS5nZXQoJ2NvbGxfaW5oZXJp dHMnKSkgJiYgbS5nZXQoJ2NvbGxfaW5oZXJpdHMnKS5sZW5ndGggIT0gMCkKKyAgICAgICAgICAg ICAgICB8fAorICAgICAgICAgICAgICAgICAgKCFfLmlzVW5kZWZpbmVkKG0uZ2V0KCd0eXBuYW1l JykpICYmIFN0cmluZyhtLmdldCgndHlwbmFtZScpKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycp ICE9PSAnJykKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAvLyBFaXRoZXIgb2ZfdHlw ZXMgb3IgY29sbF9pbmhlcml0cyBoYXMgdmFsdWUKKyAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg ICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg fSwKKyAgICAgICAgLy8gT2Z0eXBlIGlzIGRlZmluZWQ/CisgICAgICAgIGNoZWNrSW5oZXJpdGFu Y2U6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAvLyBEaXNhYmxlZCBpZiBpdCBpcyBwYXJ0aXRp b25lZCB0YWJsZQorICAgICAgICAgIGlmIChtLmdldCgnaXNfcGFydGl0aW9uZWQnKSkgeworICAg ICAgICAgICAgc2V0VGltZW91dCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICBtLnNldCgn Y29sbF9pbmhlcml0cycsIFtdKTsKKyAgICAgICAgICAgIH0sIDEwKTsKKyAgICAgICAgICAgIHJl dHVybiB0cnVlOworICAgICAgICAgIH0KKworICAgICAgICAgIC8vIGNvbGxfaW5oZXJpdHMgfHwg dHlwbmFtZQorICAgICAgICAgIGlmKCFtLmluU2NoZW1hLmFwcGx5KHRoaXMsIFttXSkgJiYKKyAg ICAgICAgICAgICAgKCBfLmlzVW5kZWZpbmVkKG0uZ2V0KCd0eXBuYW1lJykpIHx8CisgICAgICAg ICAgICAgICAgXy5pc051bGwobS5nZXQoJ3R5cG5hbWUnKSkgfHwKKyAgICAgICAgICAgICAgICBT dHJpbmcobS5nZXQoJ3R5cG5hbWUnKSkucmVwbGFjZSgvXlxzK3xccyskL2csICcnKSA9PSAnJykp IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0 dXJuIHRydWU7CisgICAgICAgIH0sCisgICAgICAgIC8vIFdlIHdpbGwgZGlzYWJsZSBMaWtlIGlm IG9mVHlwZSBpcyBkZWZpbmVkCisgICAgICAgIGlzTGlrZURpc2FibGU6IGZ1bmN0aW9uKG0pIHsK KyAgICAgICAgICBpZighbS5pblNjaGVtYVdpdGhNb2RlbENoZWNrLmFwcGx5KHRoaXMsIFttXSkg JiYKKyAgICAgICAgICAgICAgKCBfLmlzVW5kZWZpbmVkKG0uZ2V0KCd0eXBuYW1lJykpIHx8Cisg ICAgICAgICAgICAgICAgXy5pc051bGwobS5nZXQoJ3R5cG5hbWUnKSkgfHwKKyAgICAgICAgICAg ICAgICBTdHJpbmcobS5nZXQoJ3R5cG5hbWUnKSkucmVwbGFjZSgvXlxzK3xccyskL2csICcnKSA9 PSAnJykpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAg ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0sCisgICAgICAgIC8vIENoZWNrIGZvciBjb2x1bW4g Z3JpZCB3aGVuIHRvIEFkZAorICAgICAgICBjaGVja19ncmlkX2FkZF9jb25kaXRpb246IGZ1bmN0 aW9uKG0pIHsKKyAgICAgICAgICB2YXIgZW5hYmxlX2ZsYWcgPSB0cnVlOworICAgICAgICAgIGlm KCFtLmluU2NoZW1hLmFwcGx5KHRoaXMsIFttXSkpIHsKKyAgICAgICAgICAgIC8vIGlmIG9mX3R5 cGUgdGhlbiBkaXNhYmxlIGFkZCBpbiBncmlkCisgICAgICAgICAgICBpZiAoIV8uaXNVbmRlZmlu ZWQobS5nZXQoJ3R5cG5hbWUnKSkgJiYKKyAgICAgICAgICAgICAgICAhXy5pc051bGwobS5nZXQo J3R5cG5hbWUnKSkgJiYKKyAgICAgICAgICAgICAgICBtLmdldCgndHlwbmFtZScpICE9PSAnJykg eworICAgICAgICAgICAgICAgICAgICBlbmFibGVfZmxhZyA9IGZhbHNlOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIGVuYWJsZV9mbGFnOworICAgICAg ICB9LAorICAgICAgICAvLyBDaGVjayBmb3IgY29sdW1uIGdyaWQgd2hlbiB0byBlZGl0L2RlbGV0 ZSAoZm9yIGVhY2ggcm93KQorICAgICAgICBjaGVja19ncmlkX3Jvd19lZGl0X2RlbGV0ZTogZnVu Y3Rpb24obSkgeworICAgICAgICAgIHZhciBmbGFnID0gdHJ1ZTsKKyAgICAgICAgICBpZighXy5p c1VuZGVmaW5lZChtLmdldCgnaW5oZXJpdGVkZnJvbScpKSAmJgorICAgICAgICAgICAgICAgIV8u aXNOdWxsKG0uZ2V0KCdpbmhlcml0ZWRmcm9tJykpICYmCisgICAgICAgICAgICAgICBTdHJpbmco bS5nZXQoJ2luaGVyaXRlZGZyb20nKSkucmVwbGFjZSgvXlxzK3xccyskL2csICcnKSAhPT0gJycp IHsKKyAgICAgICAgICAgIGZsYWcgPSBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0 dXJuIGZsYWc7CisgICAgICAgIH0sCisgICAgICAgIC8vIFdlIHdpbGwgZGlzYWJsZSBpdCBpZiBJ bmhlcml0YW5jZSBpcyBkZWZpbmVkCisgICAgICAgIGNoZWNrT2ZUeXBlOiBmdW5jdGlvbihtKSB7 CisgICAgICAgICAgLy8gRGlzYWJsZWQgaWYgaXQgaXMgcGFydGl0aW9uZWQgdGFibGUKKyAgICAg ICAgICBpZiAobS5nZXQoJ2lzX3BhcnRpdGlvbmVkJykpIHsKKyAgICAgICAgICAgIHNldFRpbWVv dXQoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgbS5zZXQoJ3R5cG5hbWUnLCB1bmRlZmlu ZWQpOworICAgICAgICAgICAgfSwgMTApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg ICAgICAgfQorCisgICAgICAgICAgLy9jb2xsX2luaGVyaXRzIHx8IHR5cG5hbWUKKyAgICAgICAg ICBpZighbS5pblNjaGVtYVdpdGhNb2RlbENoZWNrLmFwcGx5KHRoaXMsIFttXSkgJiYKKyAgICAg ICAgICAgICAgKF8uaXNVbmRlZmluZWQobS5nZXQoJ2NvbGxfaW5oZXJpdHMnKSkgfHwKKyAgICAg ICAgICAgICAgIF8uaXNOdWxsKG0uZ2V0KCdjb2xsX2luaGVyaXRzJykpIHx8CisgICAgICAgICAg ICAgICBTdHJpbmcobS5nZXQoJ2NvbGxfaW5oZXJpdHMnKSkucmVwbGFjZSgvXlxzK3xccyskL2cs ICcnKSA9PSAnJykpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9Cisg ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0sCisgICAgICAgIC8vIFdlIHdpbGwgY2hl Y2sgaWYgd2UgYXJlIHVuZGVyIHNjaGVtYSBub2RlICYgaW4gJ2NyZWF0ZScgbW9kZQorICAgICAg ICBpblNjaGVtYVdpdGhNb2RlbENoZWNrOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgaWYodGhp cy5ub2RlX2luZm8gJiYgICdzY2hlbWEnIGluIHRoaXMubm9kZV9pbmZvKQorICAgICAgICAgIHsK KyAgICAgICAgICAgIC8vIFdlIHdpbGwgZGlzYmFsZSBjb250cm9sIGlmIGl0J3MgaW4gJ2VkaXQn IG1vZGUKKyAgICAgICAgICAgIGlmIChtLmlzTmV3KCkpIHsKKyAgICAgICAgICAgICAgcmV0dXJu IGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHRydWU7 CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiB0cnVlOworICAg ICAgICB9LAorICAgICAgICBpc1RhYmxlQXV0b1ZhY3V1bUVuYWJsZTogZnVuY3Rpb24obSkgewor ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWRkaXRpb25hbCBjb25kaXRpb24gdG8gdG9n Z2xlIGVuYWJsZS9kaXNhYmxlCisgICAgICAgICAgLy8gZm9yIHRhYmxlIGF1dG8tdmFjdXVtCisg ICAgICAgICAgaWYoIW0uaW5TY2hlbWEuYXBwbHkodGhpcywgW21dKSAmJgorICAgICAgICAgICAg ICBtLmdldCgnYXV0b3ZhY3V1bV9lbmFibGVkJykgPT09IHRydWUpIHsKKyAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg IH0sCisgICAgICAgIGlzVG9hc3RUYWJsZUF1dG9WYWN1dW1FbmFibGU6IGZ1bmN0aW9uKG0pIHsK KyAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFkZGl0aW9uYWwgY29uZGl0aW9uIHRvIHRv Z2dsZSBlbmFibGUvZGlzYWJsZQorICAgICAgICAgIC8vIGZvciB0b2FzdCB0YWJsZSBhdXRvLXZh Y3V1bQorICAgICAgICAgIGlmKCFtLmluU2NoZW1hV2l0aE1vZGVsQ2hlY2suYXBwbHkodGhpcywg W21dKSAmJgorICAgICAgICAgICAgICBtLmdldCgndG9hc3RfYXV0b3ZhY3V1bV9lbmFibGVkJykg PT0gdHJ1ZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAg ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZmV0Y2hfY29sdW1uc19hamF4 OiBmdW5jdGlvbihhcmcpIHsKKyAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCisgICAgICAgICAg ICAgIHVybCA9ICdnZXRfY29sdW1ucycsCisgICAgICAgICAgICAgIG0gPSBzZWxmLm1vZGVsLnRv cCB8fCBzZWxmLm1vZGVsLAorICAgICAgICAgICAgICBvbGRfY29sdW1ucyA9IF8uY2xvbmUobS5n ZXQoJ2NvbHVtbnMnKSkKKyAgICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZCwKKyAgICAgICAg ICAgICAgbm9kZSA9IHRoaXMuZmllbGQuZ2V0KCdzY2hlbWFfbm9kZScpLAorICAgICAgICAgICAg ICBub2RlX2luZm8gPSB0aGlzLmZpZWxkLmdldCgnbm9kZV9pbmZvJyksCisgICAgICAgICAgICAg IGZ1bGxfdXJsID0gbm9kZS5nZW5lcmF0ZV91cmwuYXBwbHkoCisgICAgICAgICAgICAgICAgbm9k ZSwgWworICAgICAgICAgICAgICAgICAgbnVsbCwgdXJsLCB0aGlzLmZpZWxkLmdldCgnbm9kZV9k YXRhJyksCisgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLmdldCgndXJsX3dpdGhfaWQnKSB8 fCBmYWxzZSwgbm9kZV9pbmZvCisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICApLAor ICAgICAgICAgICAgICBjYWNoZV9sZXZlbCA9IHRoaXMuZmllbGQuZ2V0KCdjYWNoZV9sZXZlbCcp IHx8IG5vZGUudHlwZSwKKyAgICAgICAgICAgICAgY2FjaGVfbm9kZSA9IHRoaXMuZmllbGQuZ2V0 KCdjYWNoZV9ub2RlJyk7CisKKyAgICAgICAgICBjYWNoZV9ub2RlID0gKGNhY2hlX25vZGUgJiYg cGdCcm93c2VyLk5vZGVzWydjYWNoZV9ub2RlJ10pIHx8IG5vZGU7CisKKyAgICAgICAgICBtLnRy aWdnZXIoJ3BnYWRtaW46dmlldzpmZXRjaGluZycsIG0sIHNlbGYuZmllbGQpOworICAgICAgICAg IC8vIEZldGNoaW5nIENvbHVtbnMgZGF0YSBmb3IgdGhlIHNlbGVjdGVkIHRhYmxlLgorICAgICAg ICAgICQuYWpheCh7CisgICAgICAgICAgICBhc3luYzogZmFsc2UsCisgICAgICAgICAgICB1cmw6 IGZ1bGxfdXJsLAorICAgICAgICAgICAgZGF0YTogYXJnLAorICAgICAgICAgICAgc3VjY2Vzczog ZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgICAgIGRhdGEgPSBjYWNoZV9ub2RlLmNhY2hlKHVy bCwgbm9kZV9pbmZvLCBjYWNoZV9sZXZlbCwgcmVzLmRhdGEpOworICAgICAgICAgICAgfSwKKyAg ICAgICAgICAgIGVycm9yOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgbS50cmlnZ2VyKCdw Z2FkbWluOnZpZXc6ZmV0Y2g6ZXJyb3InLCBtLCBzZWxmLmZpZWxkKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICB9KTsKKyAgICAgICAgICBtLnRyaWdnZXIoJ3BnYWRtaW46dmlldzpmZXRjaGVk JywgbSwgc2VsZi5maWVsZCk7CisgICAgICAgICAgZGF0YSA9IChkYXRhICYmIGRhdGEuZGF0YSkg fHwgW107CisgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgIH0KKyAgICAgIH0pLAorICAg ICAgY2FuQ3JlYXRlOiBmdW5jdGlvbihpdGVtRGF0YSwgaXRlbSwgZGF0YSkgeworICAgICAgICAg IC8vSWYgY2hlY2sgaXMgZmFsc2UgdGhlbiAsIHdlIHdpbGwgYWxsb3cgY3JlYXRlIG1lbnUKKyAg ICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmNoZWNrID09IGZhbHNlKQorICAgICAgICAgICAgcmV0 dXJuIHRydWU7CisKKyAgICAgICAgICB2YXIgdCA9IHBnQnJvd3Nlci50cmVlLCBpID0gaXRlbSwg ZCA9IGl0ZW1EYXRhOworICAgICAgICAgIC8vIFRvIGl0ZXJhdGUgb3ZlciB0cmVlIHRvIGNoZWNr IHBhcmVudCBub2RlCisgICAgICAgICAgd2hpbGUgKGkpIHsKKyAgICAgICAgICAgIC8vIElmIGl0 IGlzIHNjaGVtYSB0aGVuIGFsbG93IHVzZXIgdG8gY3JlYXRlIHRhYmxlCisgICAgICAgICAgICBp ZiAoXy5pbmRleE9mKFsnc2NoZW1hJ10sIGQuX3R5cGUpID4gLTEpCisgICAgICAgICAgICAgIHJl dHVybiB0cnVlOworCisgICAgICAgICAgICBpZiAoJ2NvbGwtdGFibGUnID09IGQuX3R5cGUpIHsK KyAgICAgICAgICAgICAgLy9DaGVjayBpZiB3ZSBhcmUgbm90IGNoaWxkIG9mIGNhdGFsb2cKKyAg ICAgICAgICAgICAgcHJldl9pID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGw7 CisgICAgICAgICAgICAgIHByZXZfZCA9IHByZXZfaSA/IHQuaXRlbURhdGEocHJldl9pKSA6IG51 bGw7CisgICAgICAgICAgICAgIGlmKCBwcmV2X2QuX3R5cGUgPT0gJ2NhdGFsb2cnKSB7CisgICAg ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGw7CisgICAg ICAgICAgICBkID0gaSA/IHQuaXRlbURhdGEoaSkgOiBudWxsOworICAgICAgICAgIH0KKyAgICAg ICAgICAvLyBieSBkZWZhdWx0IHdlIGRvIG5vdCB3YW50IHRvIGFsbG93IGNyZWF0ZSBtZW51Cisg ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9LAorICAgICAgLy8gQ2hlY2sgdG8gd2hldGhl ciB0YWJsZSBoYXMgZGlzYWJsZSB0cmlnZ2VyKHMpCisgICAgICBjYW5DcmVhdGVfd2l0aF90cmln Z2VyX2VuYWJsZTogZnVuY3Rpb24oaXRlbURhdGEsIGl0ZW0sIGRhdGEpIHsKKyAgICAgICAgaWYo dGhpcy5jYW5DcmVhdGUuYXBwbHkodGhpcywgW2l0ZW1EYXRhLCBpdGVtLCBkYXRhXSkpIHsKKyAg ICAgICAgICAvLyBXZSBhcmUgaGVyZSBtZWFucyB3ZSBjYW4gY3JlYXRlIG1lbnUsIG5vdyBsZXQn cyBjaGVjayBjb25kaXRpb24KKyAgICAgICAgICBpZihpdGVtRGF0YS50aWdnZXJfY291bnQgPiAw KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwKKyAg ICAgIC8vIENoZWNrIHRvIHdoZXRoZXIgdGFibGUgaGFzIGVuYWJsZSB0cmlnZ2VyKHMpCisgICAg ICBjYW5DcmVhdGVfd2l0aF90cmlnZ2VyX2Rpc2FibGU6IGZ1bmN0aW9uKGl0ZW1EYXRhLCBpdGVt LCBkYXRhKSB7CisgICAgICAgIGlmKHRoaXMuY2FuQ3JlYXRlLmFwcGx5KHRoaXMsIFtpdGVtRGF0 YSwgaXRlbSwgZGF0YV0pKSB7CisgICAgICAgICAgLy8gV2UgYXJlIGhlcmUgbWVhbnMgd2UgY2Fu IGNyZWF0ZSBtZW51LCBub3cgbGV0J3MgY2hlY2sgY29uZGl0aW9uCisgICAgICAgICAgaWYoaXRl bURhdGEudGlnZ2VyX2NvdW50ID4gMCAmJiBpdGVtRGF0YS5oYXNfZW5hYmxlX3RyaWdnZXJzID4g MCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAg ICB9KTsKKyAgfQorCisgIHJldHVybiBwZ0Jyb3dzZXIuTm9kZXNbJ3BhcnRpdGlvbiddOworfSk7 CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcnVsZXMvdGVtcGxhdGVzL3J1bGVzL2pzL3J1bGVzLmpz IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvdGFibGVzL3J1bGVzL3RlbXBsYXRlcy9ydWxlcy9qcy9ydWxlcy5qcwppbmRleCAyNWZl OTYzLi5kYjkxYWYzIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcnVsZXMvdGVtcGxhdGVzL3J1bGVz L2pzL3J1bGVzLmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2 ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9ydWxlcy90ZW1wbGF0ZXMvcnVsZXMvanMvcnVs ZXMuanMKQEAgLTE2LDYgKzE2LDcgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUucnVsZScsIFsKICAg ICAgICAgbm9kZTogJ3J1bGUnLAogICAgICAgICBsYWJlbDogZ2V0dGV4dCgnUnVsZXMnKSwKICAg ICAgICAgdHlwZTogJ2NvbGwtcnVsZScsCisgICAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBw Z0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgICBjb2x1bW5zOiBb Im5hbWUiLCAib3duZXIiLCAiY29tbWVudCJdCiAgICAgICB9KTsKICAgfQpAQCAtMzMsOCArMzQs OSBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS5ydWxlJywgWwogICAgIHJ1bGUgb3B0aW9uIGluIHRo ZSBjb250ZXh0IG1lbnUKICAgICovCiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydydWxlJ10pIHsK LSAgICBwZ0FkbWluLkJyb3dzZXIuTm9kZXNbJ3J1bGUnXSA9IHBnQWRtaW4uQnJvd3Nlci5Ob2Rl LmV4dGVuZCh7Ci0gICAgICBwYXJlbnRfdHlwZTogWyd0YWJsZScsJ3ZpZXcnXSwKKyAgICBwZ0Fk bWluLkJyb3dzZXIuTm9kZXNbJ3J1bGUnXSA9IHBnQnJvd3Nlci5Ob2RlLmV4dGVuZCh7CisgICAg ICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdCcm93c2VyLnRhYmxlQ2hpbGRUcmVlTm9kZUhpZXJh cmNoeSwKKyAgICAgIHBhcmVudF90eXBlOiBbJ3RhYmxlJywndmlldycsICdwYXJ0aXRpb24nXSwK ICAgICAgIHR5cGU6ICdydWxlJywKICAgICAgIHNxbEFsdGVySGVscDogJ3NxbC1hbHRlcnJ1bGUu aHRtbCcsCiAgICAgICBzcWxDcmVhdGVIZWxwOiAnc3FsLWNyZWF0ZXJ1bGUuaHRtbCcsCkBAIC05 OCw2ICsxMDAsMTIgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUucnVsZScsIFsKICAgICAgICAgICBj YXRlZ29yeTogJ2NyZWF0ZScsIHByaW9yaXR5OiA0LCBsYWJlbDogZ2V0dGV4dCgnUnVsZS4uLicp LAogICAgICAgICAgIGljb246ICd3Y1RhYkljb24gaWNvbi1ydWxlJywgZGF0YToge2FjdGlvbjog J2NyZWF0ZScsIGNoZWNrOiB0cnVlfSwKICAgICAgICAgICBlbmFibGU6ICdjYW5DcmVhdGUnCisg ICAgICAgIH0seworICAgICAgICAgIG5hbWU6ICdjcmVhdGVfcnVsZScsIG5vZGU6ICdwYXJ0aXRp b24nLCBtb2R1bGU6IHRoaXMsCisgICAgICAgICAgYXBwbGllczogWydvYmplY3QnLCAnY29udGV4 dCddLCBjYWxsYmFjazogJ3Nob3dfb2JqX3Byb3BlcnRpZXMnLAorICAgICAgICAgIGNhdGVnb3J5 OiAnY3JlYXRlJywgcHJpb3JpdHk6IDQsIGxhYmVsOiBnZXR0ZXh0KCdSdWxlLi4uJyksCisgICAg ICAgICAgaWNvbjogJ3djVGFiSWNvbiBpY29uLXJ1bGUnLCBkYXRhOiB7YWN0aW9uOiAnY3JlYXRl JywgY2hlY2s6IHRydWV9LAorICAgICAgICAgIGVuYWJsZTogJ2NhbkNyZWF0ZScKICAgICAgICAg fQogICAgICAgICBdKTsKICAgICAgIH0sCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvc3RhdGljL2pz L3BhcnRpdGlvbi51dGlscy5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9z ZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9zdGF0aWMvanMvcGFydGl0aW9uLnV0aWxz LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZTQ2YmEKLS0tIC9kZXYv bnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRh YmFzZXMvc2NoZW1hcy90YWJsZXMvc3RhdGljL2pzL3BhcnRpdGlvbi51dGlscy5qcwpAQCAtMCww ICsxLDMyMyBAQAorZGVmaW5lKAorICAgICAgICBbJ3NvdXJjZXMvZ2V0dGV4dCcsICdqcXVlcnkn LCAndW5kZXJzY29yZScsICdwZ2FkbWluLmJyb3dzZXInLAorICAgICAgICAnYmFja2Zvcm0nLCdi YWNrZ3JpZCcsICdwZ2FkbWluLmJyb3dzZXIuY29sbGVjdGlvbiddLAorZnVuY3Rpb24oZ2V0dGV4 dCwgJCwgXywgcGdCcm93c2VyLCBCYWNrZm9ybSwgQmFja2dyaWQpIHsKKworICBCYWNrZ3JpZC5Q YXJ0aXRpb25Sb3cgPSBCYWNrZ3JpZC5Sb3cuZXh0ZW5kKHsKKyAgICBtb2RlbER1cGxpY2F0ZUNv bG9yOiAibGlnaHRZZWxsb3ciLAorCisgICAgbW9kZWxVbmlxdWVDb2xvcjogIiNmZmYiLAorCisg ICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkgeworICAgICAgQmFja2dyaWQuUm93LnByb3RvdHlw ZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICB2YXIgc2VsZiA9IHRo aXM7CisgICAgICBzZWxmLm1vZGVsLm9uKCJjaGFuZ2U6aXNfYXR0YWNoIiwgZnVuY3Rpb24oKSB7 CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgc2VsZi5jb2x1bW5z LmVhY2goZnVuY3Rpb24oY29sKSB7CisgICAgICAgICAgICBpZiAoY29sLmdldCgnbmFtZScpID09 ICdwYXJ0aXRpb25fbmFtZScpIHsKKyAgICAgICAgICAgICAgdmFyIGlkeCA9IHNlbGYuY29sdW1u cy5pbmRleE9mKGNvbCksCisgICAgICAgICAgICAgICAgY2YgPSBjb2wuZ2V0KCJjZWxsRnVuY3Rp b24iKSwKKyAgICAgICAgICAgICAgICBjZWxsID0gbmV3IChjZi5hcHBseShjb2wsIFtzZWxmLm1v ZGVsXSkpKHsKKyAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sLAorICAgICAgICAgICAgICAg ICAgbW9kZWw6IHNlbGYubW9kZWwKKyAgICAgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgICAg ICAgIG9sZENlbGwgPSBzZWxmLmNlbGxzW2lkeF07CisgICAgICAgICAgICAgICAgb2xkQ2VsbC5y ZW1vdmUoKTsKKyAgICAgICAgICAgICAgICBzZWxmLmNlbGxzW2lkeF0gPSBjZWxsOworICAgICAg ICAgICAgICAgIHNlbGYucmVuZGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7Cisg ICAgICAgIH0sIDEwKTsKKyAgICAgIH0pOworICAgICAgc2VsZi5saXN0ZW5UbyhzZWxmLm1vZGVs LCAncGdhZG1pbi1zZXNzaW9uOm1vZGVsOmR1cGxpY2F0ZScsIHNlbGYubW9kZWxEdXBsaWNhdGUp OworICAgICAgc2VsZi5saXN0ZW5UbyhzZWxmLm1vZGVsLCAncGdhZG1pbi1zZXNzaW9uOm1vZGVs OnVuaXF1ZScsIHNlbGYubW9kZWxVbmlxdWUpOworICAgIH0sCisgICAgbW9kZWxEdXBsaWNhdGU6 IGZ1bmN0aW9uKCkgeworICAgICAgJCh0aGlzLmVsKS5yZW1vdmVDbGFzcygibmV3Iik7CisgICAg ICB0aGlzLmVsLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMubW9kZWxEdXBsaWNhdGVDb2xv cjsKKyAgICB9LAorICAgIG1vZGVsVW5pcXVlOiBmdW5jdGlvbigpIHsKKyAgICAgIHRoaXMuZWwu c3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5tb2RlbFVuaXF1ZUNvbG9yOworICAgIH0KKyAg fSk7CisKKyAgdmFyIGdldFBhcnRpdGlvbkNlbGwgPSBmdW5jdGlvbihtb2RlbCkgeworICAgIHZh ciBpc19hdHRhY2ggPSBtb2RlbC5nZXQoImlzX2F0dGFjaCIpOworICAgIGlmIChpc19hdHRhY2gp IHsKKyAgICAgIHZhciBvcHRpb25zID0gW107CisgICAgICBtb2RlbC5zZXQoeydwYXJ0aXRpb25f bmFtZSc6IHVuZGVmaW5lZH0sIHtzaWxlbnQ6dHJ1ZX0pOworICAgICAgXy5lYWNoKG1vZGVsLnRv cC50YWJsZV9vcHRpb25zLCBmdW5jdGlvbih0KSB7CisgICAgICAgIG9wdGlvbnMucHVzaChbdC5s YWJlbCwgdC52YWx1ZV0pOworICAgICAgfSk7CisgICAgICByZXR1cm4gQmFja2dyaWQuRXh0ZW5z aW9uLlNlbGVjdDJDZWxsLmV4dGVuZCh7b3B0aW9uVmFsdWVzOiBvcHRpb25zfSk7CisKKyAgICB9 IGVsc2UgeworICAgICAgcmV0dXJuIEJhY2tncmlkLlN0cmluZ0NlbGw7CisgICAgfQorICB9Owor CisgIEJhY2tmb3JtLlBhcnRpdGlvbktleU1vZGVsID0gcGdCcm93c2VyLk5vZGUuTW9kZWwuZXh0 ZW5kKHsKKyAgICAgZGVmYXVsdHM6IHsKKyAgICAgICBrZXlfdHlwZTogJ2NvbHVtbicsCisgICAg ICAgcHRfY29sdW1uOiB1bmRlZmluZWQsCisgICAgICAgZXhwcmVzc2lvbjogdW5kZWZpbmVkCisg ICAgIH0sCisgICAgIGtleXM6WydwdF9jb2x1bW4nXSwKKyAgICAgc2NoZW1hOiBbeworICAgICAg IGlkOiAna2V5X3R5cGUnLCBsYWJlbDonS2V5IHR5cGUnLCB0eXBlOidzZWxlY3QyJywgZWRpdGFi bGU6IHRydWUsCisgICAgICAgY2VsbDonc2VsZWN0MicsIGNlbGxIZWFkZXJDbGFzc2VzOiAnd2lk dGhfcGVyY2VudF8yNScsCisgICAgICAgc2VsZWN0Mjoge2FsbG93Q2xlYXI6IGZhbHNlfSwKKyAg ICAgICBvcHRpb25zOlt7CisgICAgICAgICBsYWJlbDogJ0NvbHVtbicsIHZhbHVlOiAnY29sdW1u JworICAgICAgIH0seworICAgICAgICAgbGFiZWw6ICdFeHByZXNzaW9uJywgdmFsdWU6ICdleHBy ZXNzaW9uJworICAgICAgIH1dCisgICAgIH0seworICAgICAgIGlkOiAncHRfY29sdW1uJywgbGFi ZWw6IGdldHRleHQoJ0NvbHVtbicpLCB0eXBlOid0ZXh0JywKKyAgICAgICBjZWxsOiBCYWNrZ3Jp ZC5FeHRlbnNpb24uU2VsZWN0MkRlcENlbGwuZXh0ZW5kKHsKKyAgICAgICAgIGtleVBhdGhBY2Nl c3NvcjogZnVuY3Rpb24ob2JqLCBwYXRoKSB7CisgICAgICAgICAgIHZhciByZXMgPSBvYmo7Cisg ICAgICAgICAgIGlmKF8uaXNBcnJheShyZXMpKSB7CisgICAgICAgICAgICAgcmV0dXJuIF8ubWFw KHJlcywgZnVuY3Rpb24obykgeyByZXR1cm4gb1sncHRfY29sdW1uJ10KKyAgICAgICAgICAgICB9 KTsKKyAgICAgICAgICAgfQorICAgICAgICAgICBwYXRoID0gcGF0aC5zcGxpdCgnLicpOworICAg ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg ICAgICBpZiAoXy5pc051bGwocmVzKSkgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgaWYgKF8u aXNFbXB0eShwYXRoW2ldKSkgY29udGludWU7CisgICAgICAgICAgICAgaWYgKCFfLmlzVW5kZWZp bmVkKHJlc1twYXRoW2ldXSkpIHJlcyA9IHJlc1twYXRoW2ldXTsKKyAgICAgICAgICAgfQorICAg ICAgICAgICByZXR1cm4gXy5pc09iamVjdChyZXMpICYmICFfLmlzQXJyYXkocmVzKSA/IG51bGwg OiByZXM7CisgICAgICAgICB9LAorICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7Cisg ICAgICAgICAvLyBIZXJlIHdlIHdpbGwgZGVjaWRlIGlmIHdlIG5lZWQgdG8gY2FsbCBVUkwKKyAg ICAgICAgIC8vIE9yIGZldGNoIHRoZSBkYXRhIGZyb20gcGFyZW50IGNvbHVtbnMgY29sbGVjdGlv bgorICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgICAgIGlmKHRoaXMubW9kZWwu aGFuZGxlcikgeworICAgICAgICAgICAgIEJhY2tncmlkLkV4dGVuc2lvbi5TZWxlY3QyRGVwQ2Vs bC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAg ICAgIC8vIERvIG5vdCBsaXN0ZW4gZm9yIGFueSBldmVudChzKSBmb3IgZXhpc3RpbmcgY29uc3Ry YWludC4KKyAgICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChzZWxmLm1vZGVsLmdldCgnb2lk JykpKSB7CisgICAgICAgICAgICAgICB2YXIgdGFibGVDb2xzID0gc2VsZi5tb2RlbC50b3AuZ2V0 KCdjb2x1bW5zJyk7CisgICAgICAgICAgICAgICBzZWxmLmxpc3RlblRvKHRhYmxlQ29scywgJ3Jl bW92ZScgLCBzZWxmLnJlc2V0Q29sT3B0aW9ucyk7CisgICAgICAgICAgICAgICBzZWxmLmxpc3Rl blRvKHRhYmxlQ29scywgJ2NoYW5nZTpuYW1lJywgc2VsZi5yZXNldENvbE9wdGlvbnMpOworICAg ICAgICAgICAgIH0KKworICAgICAgICAgICAgIHNlbGYuY3VzdG9tX29wdGlvbnMoKTsKKyAgICAg ICAgICAgfQorICAgICAgICAgfSwKKyAgICAgICAgIHJlc2V0Q29sT3B0aW9uczogZnVuY3Rpb24o bSkgeworICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgICAgc2V0VGltZW91 dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgc2VsZi5jdXN0b21fb3B0aW9ucygpOworICAg ICAgICAgICAgIHNlbGYucmVuZGVyLmFwcGx5KHNlbGYpOworICAgICAgICAgICB9LCA1MCk7Cisg ICAgICAgICB9LAorICAgICAgICAgY3VzdG9tX29wdGlvbnM6IGZ1bmN0aW9uKCkgeworICAgICAg ICAgICAvLyBXZSB3aWxsIGFkZCBhbGwgdGhlIGNvbHVtbnMgZW50ZXJlZCBieSB1c2VyIGluIHRh YmxlIG1vZGVsCisgICAgICAgICAgIHZhciBjb2x1bW5zID0gdGhpcy5tb2RlbC50b3AuZ2V0KCdj b2x1bW5zJyksCisgICAgICAgICAgICAgYWRkZWRfY29sdW1uc19mcm9tX3RhYmxlcyA9IFtdOwor CisgICAgICAgICAgIGlmIChjb2x1bW5zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICBfLmVh Y2goY29sdW1ucy5tb2RlbHMsIGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgICAgICAgdmFyIGNv bCA9IG0uZ2V0KCduYW1lJyk7CisgICAgICAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKGNv bCkgJiYgIV8uaXNOdWxsKGNvbCkpIHsKKyAgICAgICAgICAgICAgICAgICBhZGRlZF9jb2x1bW5z X2Zyb21fdGFibGVzLnB1c2goCisgICAgICAgICAgICAgICAgICAgICB7bGFiZWw6IGNvbCwgdmFs dWU6IGNvbCwgaW1hZ2U6J2ljb24tY29sdW1uJ30KKyAgICAgICAgICAgICAgICAgICApOworICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfSk7CisgICAgICAgICAgIH0KKyAgICAgICAg ICAgLy8gU2V0IHRoZSB2YWx1ZXMgaW4gdG8gb3B0aW9ucyBzbyB0aGF0IHVzZXIgY2FuIHNlbGVj dAorICAgICAgICAgICB0aGlzLmNvbHVtbi5zZXQoJ29wdGlvbnMnLCBhZGRlZF9jb2x1bW5zX2Zy b21fdGFibGVzKTsKKyAgICAgICAgIH0sCisgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKCkgewor ICAgICAgICAgICBpZih0aGlzLm1vZGVsLmhhbmRsZXIpIHsKKyAgICAgICAgICAgICB2YXIgc2Vs ZiA9IHRoaXMsCisgICAgICAgICAgICAgdGFibGVDb2xzID0gc2VsZi5tb2RlbC50b3AuZ2V0KCdj b2x1bW5zJyk7CisgICAgICAgICAgICAgc2VsZi5zdG9wTGlzdGVuaW5nKHRhYmxlQ29scywgJ3Jl bW92ZScgLCBzZWxmLnJlc2V0Q29sT3B0aW9ucyk7CisgICAgICAgICAgICAgc2VsZi5zdG9wTGlz dGVuaW5nKHRhYmxlQ29scywgJ2NoYW5nZTpuYW1lJyAsIHNlbGYucmVzZXRDb2xPcHRpb25zKTsK KyAgICAgICAgICAgICBCYWNrZ3JpZC5FeHRlbnNpb24uU2VsZWN0MkRlcENlbGwucHJvdG90eXBl LnJlbW92ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAgICB9CisgICAgICAgICB9 CisgICAgICAgfSksCisgICAgICAgZGVwczogWydrZXlfdHlwZSddLAorICAgICAgIGNlbGxIZWFk ZXJDbGFzc2VzOiAnd2lkdGhfcGVyY2VudF8zMCcsCisgICAgICAgdHJhbnNmb3JtIDogZnVuY3Rp b24oZGF0YSl7CisgICAgICAgICB2YXIgcmVzID0gW107CisgICAgICAgICBpZiAoZGF0YSAmJiBf LmlzQXJyYXkoZGF0YSkpIHsKKyAgICAgICAgICAgXy5lYWNoKGRhdGEsIGZ1bmN0aW9uKGQpIHsK KyAgICAgICAgICAgICByZXMucHVzaCh7bGFiZWw6IGQubGFiZWwsIHZhbHVlOiBkLmxhYmVsLCBp bWFnZTonaWNvbi1jb2x1bW4nfSk7CisgICAgICAgICAgIH0pCisgICAgICAgICB9CisgICAgICAg ICByZXR1cm4gcmVzOworICAgICAgIH0sCisgICAgICAgc2VsZWN0Mjp7YWxsb3dDbGVhcjpmYWxz ZX0sCisgICAgICAgZWRpdGFibGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgIGlmIChtLmdldCgn a2V5X3R5cGUnKSA9PSAnZXhwcmVzc2lvbicpIHsKKyAgICAgICAgICAgc2V0VGltZW91dCggZnVu Y3Rpb24oKSB7CisgICAgICAgICAgICAgIG0uc2V0KCdwdF9jb2x1bW4nLCB1bmRlZmluZWQpOwor ICAgICAgICAgICB9LCAxMCk7CisgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgIH0K KyAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgIH0KKyAgICAgfSx7CisgICAgICAgaWQ6ICdl eHByZXNzaW9uJywgbGFiZWw6J0V4cHJlc3Npb24nLCB0eXBlOid0ZXh0JywKKyAgICAgICBjZWxs OkJhY2tncmlkLkV4dGVuc2lvbi5TdHJpbmdEZXBDZWxsLAorICAgICAgIGNlbGxIZWFkZXJDbGFz c2VzOiAnd2lkdGhfcGVyY2VudF80NScsCisgICAgICAgZGVwczogWydrZXlfdHlwZSddLAorICAg ICAgIGVkaXRhYmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAgICBpZiAobS5nZXQoJ2tleV90eXBl JykgPT0gJ2NvbHVtbicpIHsKKyAgICAgICAgICAgc2V0VGltZW91dCggZnVuY3Rpb24oKSB7Cisg ICAgICAgICAgICAgIG0uc2V0KCdleHByZXNzaW9uJywgdW5kZWZpbmVkKTsKKyAgICAgICAgICAg fSwgMTApOworICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICB9CisgICAgICAgICBy ZXR1cm4gdHJ1ZTsKKyAgICAgICB9CisgICAgIH0KKyAgICBdLAorICAgIHZhbGlkYXRlOiBmdW5j dGlvbihrZXlzKSB7CisgICAgICB2YXIgY29sX3R5cGUgPSB0aGlzLmdldCgna2V5X3R5cGUnKSwK KyAgICAgICAgIHB0X2NvbHVtbiA9IHRoaXMuZ2V0KCdwdF9jb2x1bW4nKSwKKyAgICAgICAgIGV4 cHJlc3Npb24gPSB0aGlzLmdldCgnZXhwcmVzc2lvbicpOworCisgICAgICAvLyBIYXZlIHRvIGNs ZWFyIGV4aXN0aW5nIHZhbGlkYXRpb24gYmVmb3JlIGluaXRpYXRpbmcgY3VycmVudCBzdGF0ZQor ICAgICAgLy8gdmFsaWRhdGlvbiBvbmx5CisgICAgICB0aGlzLmVycm9yTW9kZWwuY2xlYXIoKTsK KworICAgICAgaWYgKF8uaXNVbmRlZmluZWQoY29sX3R5cGUpIHx8IF8uaXNOdWxsKGNvbF90eXBl KSB8fAorICAgICAgICBTdHJpbmcoY29sX3R5cGUpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykg PT0gJycpIHsKKyAgICAgICAgbXNnID0gZ2V0dGV4dCgnUGFydGl0aW9uIGtleSB0eXBlIGNhbm5v dCBiZSBlbXB0eS4nKTsKKyAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgna2V5X3R5cGUnLCBt c2cpOworICAgICAgICByZXR1cm4gbXNnOworICAgICAgfQorICAgICAgZWxzZSBpZiAoY29sX3R5 cGUgPT0gJ2NvbHVtbicgJiYKKyAgICAgICAgXy5pc1VuZGVmaW5lZChwdF9jb2x1bW4pIHx8IF8u aXNOdWxsKHB0X2NvbHVtbikgfHwKKyAgICAgICAgU3RyaW5nKHB0X2NvbHVtbikucmVwbGFjZSgv XlxzK3xccyskL2csICcnKSA9PSAnJykgeworICAgICAgICBtc2cgPSBnZXR0ZXh0KCdQYXJ0aXRp b24ga2V5IGNvbHVtbiBjYW5ub3QgYmUgZW1wdHkuJyk7CisgICAgICAgIHRoaXMuZXJyb3JNb2Rl bC5zZXQoJ3B0X2NvbHVtbicsIG1zZyk7CisgICAgICAgIHJldHVybiBtc2c7CisgICAgICB9Cisg ICAgICBlbHNlIGlmIChjb2xfdHlwZSA9PSAnZXhwcmVzc2lvbicgJiYKKyAgICAgICAgXy5pc1Vu ZGVmaW5lZChleHByZXNzaW9uKSB8fCBfLmlzTnVsbChleHByZXNzaW9uKSB8fAorICAgICAgICBT dHJpbmcoZXhwcmVzc2lvbikucmVwbGFjZSgvXlxzK3xccyskL2csICcnKSA9PSAnJykgeworICAg ICAgICBtc2cgPSBnZXR0ZXh0KCdQYXJ0aXRpb24ga2V5IGV4cHJlc3Npb24gY2Fubm90IGJlIGVt cHR5LicpOworICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCdleHByZXNzaW9uJywgbXNnKTsK KyAgICAgICAgcmV0dXJuIG1zZzsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIG51bGw7CisgICAg fQorICB9KTsKKworICBCYWNrZm9ybS5QYXJ0aXRpb25zTW9kZWwgPSBwZ0Jyb3dzZXIuTm9kZS5N b2RlbC5leHRlbmQoeworICAgIGRlZmF1bHRzOiB7CisgICAgICBvaWQ6IHVuZGVmaW5lZCwKKyAg ICAgIGlzX2F0dGFjaDogZmFsc2UsCisgICAgICBwYXJ0aXRpb25fbmFtZTogdW5kZWZpbmVkLAor ICAgICAgdmFsdWVzX2Zyb206IHVuZGVmaW5lZCwKKyAgICAgIHZhbHVlc190bzogdW5kZWZpbmVk LAorICAgICAgdmFsdWVzX2luOiB1bmRlZmluZWQKKyAgICB9LAorICAgIGtleXM6WydwYXJ0aXRp b25fbmFtZSddLAorICAgIHNjaGVtYTogW3sKKyAgICAgIGlkOiAnb2lkJywgbGFiZWw6IGdldHRl eHQoJ09JRCcpLCB0eXBlOiAndGV4dCcKKyAgICB9LHsKKyAgICAgIGlkOiAnaXNfYXR0YWNoJywg bGFiZWw6Z2V0dGV4dCgnT3BlcmF0aW9uJyksIGNlbGw6ICdzd2l0Y2gnLAorICAgICAgdHlwZTog J3N3aXRjaCcsIG9wdGlvbnM6IHsgJ29uVGV4dCc6ICdBdHRhY2gnLCAnb2ZmVGV4dCc6ICdDcmVh dGUnfSwKKyAgICAgIGNlbGxIZWFkZXJDbGFzc2VzOiAnd2lkdGhfcGVyY2VudF81JywKKyAgICAg IGVkaXRhYmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAgIGlmIChtIGluc3RhbmNlb2YgQmFja2Jv bmUuTW9kZWwgJiYgbS5pc05ldygpICYmICFtLnRvcC5pc05ldygpKQorICAgICAgICAgIHJldHVy biB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfSx7CisgICAgICBp ZDogJ3BhcnRpdGlvbl9uYW1lJywgbGFiZWw6IGdldHRleHQoJ05hbWUnKSwgdHlwZTogJ3RleHQn LCBjZWxsOidzdHJpbmcnLAorICAgICAgY2VsbEhlYWRlckNsYXNzZXM6ICd3aWR0aF9wZXJjZW50 XzI1JywKKyAgICAgIGVkaXRhYmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAgIGlmIChtIGluc3Rh bmNlb2YgQmFja2JvbmUuTW9kZWwgJiYgbS5pc05ldygpKQorICAgICAgICAgIHJldHVybiB0cnVl OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9LCBjZWxsRnVuY3Rpb246IGdldFBhcnRp dGlvbkNlbGwKKyAgICB9LHsKKyAgICAgIGlkOiAndmFsdWVzX2Zyb20nLCBsYWJlbDonRnJvbScs IHR5cGU6J3RleHQnLAorICAgICAgY2VsbDpCYWNrZ3JpZC5FeHRlbnNpb24uU3RyaW5nRGVwQ2Vs bCwKKyAgICAgIGNlbGxIZWFkZXJDbGFzc2VzOiAnd2lkdGhfcGVyY2VudF8yMCcsCisgICAgICBl ZGl0YWJsZTogZnVuY3Rpb24obSkgeworICAgICAgIGlmKG0uaGFuZGxlciAmJiBtLmhhbmRsZXIu dG9wICYmCisgICAgICAgICAgbS5oYW5kbGVyLnRvcC5hdHRyaWJ1dGVzICYmCisgICAgICAgICAg bS5oYW5kbGVyLnRvcC5hdHRyaWJ1dGVzLnBhcnRpdGlvbl90eXBlID09ICdyYW5nZScgJiYKKyAg ICAgICAgICBtIGluc3RhbmNlb2YgQmFja2JvbmUuTW9kZWwgJiYgbS5pc05ldygpKQorICAgICAg ICAgIHJldHVybiB0cnVlOworICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9LHsK KyAgICAgIGlkOiAndmFsdWVzX3RvJywgbGFiZWw6J1RvJywgdHlwZTondGV4dCcsCisgICAgICBj ZWxsOkJhY2tncmlkLkV4dGVuc2lvbi5TdHJpbmdEZXBDZWxsLAorICAgICAgY2VsbEhlYWRlckNs YXNzZXM6ICd3aWR0aF9wZXJjZW50XzIwJywKKyAgICAgIGVkaXRhYmxlOiBmdW5jdGlvbihtKSB7 CisgICAgICAgIGlmKG0uaGFuZGxlciAmJiBtLmhhbmRsZXIudG9wICYmCisgICAgICAgICAgbS5o YW5kbGVyLnRvcC5hdHRyaWJ1dGVzICYmCisgICAgICAgICAgbS5oYW5kbGVyLnRvcC5hdHRyaWJ1 dGVzLnBhcnRpdGlvbl90eXBlID09ICdyYW5nZScgJiYKKyAgICAgICAgICBtIGluc3RhbmNlb2Yg QmFja2JvbmUuTW9kZWwgJiYgbS5pc05ldygpKQorICAgICAgICAgIHJldHVybiB0cnVlOworICAg ICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfSx7CisgICAgICBpZDogJ3ZhbHVlc19p bicsIGxhYmVsOidJbicsIHR5cGU6J3RleHQnLAorICAgICAgY2VsbDpCYWNrZ3JpZC5FeHRlbnNp b24uU3RyaW5nRGVwQ2VsbCwKKyAgICAgIGNlbGxIZWFkZXJDbGFzc2VzOiAnd2lkdGhfcGVyY2Vu dF8yNScsCisgICAgICBlZGl0YWJsZTogZnVuY3Rpb24obSkgeworICAgICAgICBpZihtLmhhbmRs ZXIgJiYgbS5oYW5kbGVyLnRvcCAmJgorICAgICAgICAgIG0uaGFuZGxlci50b3AuYXR0cmlidXRl cyAmJgorICAgICAgICAgIG0uaGFuZGxlci50b3AuYXR0cmlidXRlcy5wYXJ0aXRpb25fdHlwZSA9 PSAnbGlzdCcgJiYKKyAgICAgICAgICBtIGluc3RhbmNlb2YgQmFja2JvbmUuTW9kZWwgJiYgbS5p c05ldygpKQorICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg ICAgICB9CisgICAgfV0sCisgICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGtleXMpIHsKKyAgICAgIHZh ciBwYXJ0aXRpb25fbmFtZSA9IHRoaXMuZ2V0KCdwYXJ0aXRpb25fbmFtZScpLAorICAgICAgICAg dmFsdWVzX2Zyb20gPSB0aGlzLmdldCgndmFsdWVzX2Zyb20nKSwKKyAgICAgICAgIHZhbHVlc190 byA9IHRoaXMuZ2V0KCd2YWx1ZXNfdG8nKSwKKyAgICAgICAgIHZhbHVlc19pbiA9IHRoaXMuZ2V0 KCd2YWx1ZXNfaW4nKTsKKworICAgICAgLy8gSGF2ZSB0byBjbGVhciBleGlzdGluZyB2YWxpZGF0 aW9uIGJlZm9yZSBpbml0aWF0aW5nIGN1cnJlbnQgc3RhdGUKKyAgICAgIC8vIHZhbGlkYXRpb24g b25seQorICAgICAgdGhpcy5lcnJvck1vZGVsLmNsZWFyKCk7CisKKyAgICAgIGlmIChfLmlzVW5k ZWZpbmVkKHBhcnRpdGlvbl9uYW1lKSB8fCBfLmlzTnVsbChwYXJ0aXRpb25fbmFtZSkgfHwKKyAg ICAgICBTdHJpbmcocGFydGl0aW9uX25hbWUpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykgPT0g JycpIHsKKyAgICAgICBtc2cgPSBnZXR0ZXh0KCdQYXJ0aXRpb24gbmFtZSBjYW5ub3QgYmUgZW1w dHkuJyk7CisgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgncGFydGl0aW9uX25hbWUnLCBtc2cp OworICAgICAgIHJldHVybiBtc2c7CisgICAgICB9CisKKyAgICAgIGlmICh0aGlzLnRvcC5nZXQo J3BhcnRpdGlvbl90eXBlJykgPT0gJ3JhbmdlJykgeworICAgICAgICBpZiAoXy5pc1VuZGVmaW5l ZCh2YWx1ZXNfZnJvbSkgfHwgXy5pc051bGwodmFsdWVzX2Zyb20pIHx8CisgICAgICAgICAgU3Ry aW5nKHZhbHVlc19mcm9tKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpID09ICcnKSB7CisgICAg ICAgICAgbXNnID0gZ2V0dGV4dCgnRm9yIHJhbmdlIHBhcnRpdGlvbiBGcm9tIGZpZWxkIGNhbm5v dCBiZSBlbXB0eS4nKTsKKyAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCd2YWx1ZXNfZnJv bScsIG1zZyk7CisgICAgICAgICAgcmV0dXJuIG1zZzsKKyAgICAgICAgfSBlbHNlIGlmIChfLmlz VW5kZWZpbmVkKHZhbHVlc190bykgfHwgXy5pc051bGwodmFsdWVzX3RvKSB8fAorICAgICAgICAg IFN0cmluZyh2YWx1ZXNfdG8pLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykgPT0gJycpIHsKKyAg ICAgICAgICBtc2cgPSBnZXR0ZXh0KCdGb3IgcmFuZ2UgcGFydGl0aW9uIFRvIGZpZWxkIGNhbm5v dCBiZSBlbXB0eS4nKTsKKyAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCd2YWx1ZXNfdG8n LCBtc2cpOworICAgICAgICAgIHJldHVybiBtc2c7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBp ZiAodGhpcy50b3AuZ2V0KCdwYXJ0aXRpb25fdHlwZScpID09ICdsaXN0JykgeworICAgICAgICBp ZiAoXy5pc1VuZGVmaW5lZCh2YWx1ZXNfaW4pIHx8IF8uaXNOdWxsKHZhbHVlc19pbikgfHwKKyAg ICAgICAgICBTdHJpbmcodmFsdWVzX2luKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpID09ICcn KSB7CisgICAgICAgICAgbXNnID0gZ2V0dGV4dCgnRm9yIGxpc3QgcGFydGl0aW9uIEluIGZpZWxk IGNhbm5vdCBiZSBlbXB0eS4nKTsKKyAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCd2YWx1 ZXNfaW4nLCBtc2cpOworICAgICAgICAgIHJldHVybiBtc2c7CisgICAgICAgIH0KKyAgICAgIH0K KworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9KTsKKworfSk7CmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvc3RhdGljL2pzL3RhYmxlLmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3N0YXRpYy9qcy90YWJsZS5q cwppbmRleCBkYmQxNzFlLi44MjY1MWJlIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvc3RhdGljL2pz L3RhYmxlLmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9zdGF0aWMvanMvdGFibGUuanMKQEAgLTMsOCArMywx MCBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS50YWJsZScsIFsKICAgJ3VuZGVyc2NvcmUuc3RyaW5n JywgJ3BnYWRtaW4nLCAncGdhZG1pbi5icm93c2VyJywgJ2FsZXJ0aWZ5JywKICAgJ3NvdXJjZXMv YWxlcnRzL2FsZXJ0aWZ5X3dyYXBwZXInLAogICAncGdhZG1pbi5icm93c2VyLmNvbGxlY3Rpb24n LCAncGdhZG1pbi5ub2RlLmNvbHVtbicsCi0gICdwZ2FkbWluLm5vZGUuY29uc3RyYWludHMnCi1d LCBmdW5jdGlvbihnZXR0ZXh0LCB1cmxfZm9yLCAkLCBfLCBTLCBwZ0FkbWluLCBwZ0Jyb3dzZXIs IGFsZXJ0aWZ5LCBBbGVydGlmeVdyYXBwZXIpIHsKKyAgJ3BnYWRtaW4ubm9kZS5jb25zdHJhaW50 cycsICdwZ2FkbWluLmJyb3dzZXIudGFibGUucGFydGl0aW9uLnV0aWxzJworXSwgZnVuY3Rpb24o CisgIGdldHRleHQsIHVybF9mb3IsICQsIF8sIFMsIHBnQWRtaW4sIHBnQnJvd3NlciwgYWxlcnRp ZnksIEFsZXJ0aWZ5V3JhcHBlcgorKSB7CiAKICAgaWYgKCFwZ0Jyb3dzZXIuTm9kZXNbJ2NvbGwt dGFibGUnXSkgewogICAgIHZhciBkYXRhYmFzZXMgPSBwZ0Jyb3dzZXIuTm9kZXNbJ2NvbGwtdGFi bGUnXSA9CkBAIC0xMiw3ICsxNCw3IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnRhYmxlJywgWwog ICAgICAgICBub2RlOiAndGFibGUnLAogICAgICAgICBsYWJlbDogZ2V0dGV4dCgnVGFibGVzJyks CiAgICAgICAgIHR5cGU6ICdjb2xsLXRhYmxlJywKLSAgICAgICAgY29sdW1uczogWyduYW1lJywg J3JlbG93bmVyJywgJ2Rlc2NyaXB0aW9uJ10sCisgICAgICAgIGNvbHVtbnM6IFsnbmFtZScsICdy ZWxvd25lcicsICdpc19wYXJ0aXRpb25lZCcsICdkZXNjcmlwdGlvbiddLAogICAgICAgICBoYXNT dGF0aXN0aWNzOiB0cnVlLAogICAgICAgICBzdGF0c1ByZXR0aWZ5RmllbGRzOiBbJ1NpemUnLCAn SW5kZXhlcyBzaXplJywgJ1RhYmxlIHNpemUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ1RvYXN0IHRhYmxlIHNpemUnLCAnVHVwbGUgbGVuZ3RoJywKQEAgLTIyLDYgKzI0LDcgQEAg ZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFibGUnLCBbCiAKICAgaWYgKCFwZ0Jyb3dzZXIuTm9kZXNb J3RhYmxlJ10pIHsKICAgICBwZ0Jyb3dzZXIuTm9kZXNbJ3RhYmxlJ10gPSBwZ0Jyb3dzZXIuTm9k ZS5leHRlbmQoeworICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6IHBnQnJvd3Nlci50YWJsZUNo aWxkVHJlZU5vZGVIaWVyYXJjaHksCiAgICAgICB0eXBlOiAndGFibGUnLAogICAgICAgbGFiZWw6 IGdldHRleHQoJ1RhYmxlJyksCiAgICAgICBjb2xsZWN0aW9uX3R5cGU6ICdjb2xsLXRhYmxlJywK QEAgLTM5LDcgKzQyLDcgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFibGUnLCBbCiAgICAgICBo ZWlnaHQ6ICc5NSUnLAogICAgICAgd2lkdGg6ICc4NSUnLAogICAgICAgSW5pdDogZnVuY3Rpb24o KSB7Ci0gICAgICAgIC8qIEF2b2lkIG11bGl0cGxlIHJlZ2lzdHJhdGlvbiBvZiBtZW51cyAqLwor ICAgICAgICAvKiBBdm9pZCBtdWx0aXBsZSByZWdpc3RyYXRpb24gb2YgbWVudXMgKi8KICAgICAg ICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTkxLDYg Kzk0LDkgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFibGUnLCBbCiAgICAgICAgICAgaWNvbjog J2ZhIGZhLWJhci1jaGFydCcsIGVuYWJsZSA6ICdjYW5DcmVhdGUnCiAgICAgICAgIH0KICAgICAg ICAgXSk7CisgICAgICAgIHBnQnJvd3Nlci5FdmVudHMub24oCisgICAgICAgICAgJ3BnYWRtaW46 YnJvd3Nlcjpub2RlOnRhYmxlOnVwZGF0ZWQnLCB0aGlzLm9uVGFibGVVcGRhdGVkLCB0aGlzCisg ICAgICAgICk7CiAgICAgICB9LAogICAgICAgY2FuRHJvcDogcGdCcm93c2VyLk5vZGVzWydzY2hl bWEnXS5jYW5DaGlsZERyb3AsCiAgICAgICBjYW5Ecm9wQ2FzY2FkZTogcGdCcm93c2VyLk5vZGVz WydzY2hlbWEnXS5jYW5DaGlsZERyb3AsCkBAIC0yODQsNyArMjkwLDEwIEBAIGRlZmluZSgncGdh ZG1pbi5ub2RlLnRhYmxlJywgWwogICAgICAgICAgIGhhc3RvYXN0dGFibGU6IHRydWUsCiAgICAg ICAgICAgdG9hc3RfYXV0b3ZhY3V1bV9lbmFibGVkOiBmYWxzZSwKICAgICAgICAgICBhdXRvdmFj dXVtX2VuYWJsZWQ6IGZhbHNlLAotICAgICAgICAgIHByaW1hcnlfa2V5OiBbXQorICAgICAgICAg IHByaW1hcnlfa2V5OiBbXSwKKyAgICAgICAgICBwYXJ0aXRpb25zOiBbXSwKKyAgICAgICAgICBw YXJ0aXRpb25fdHlwZTogJ3JhbmdlJywKKyAgICAgICAgICBpc19wYXJ0aXRpb25lZDogZmFsc2UK ICAgICAgICAgfSwKICAgICAgICAgLy8gRGVmYXVsdCB2YWx1ZXMhCiAgICAgICAgIGluaXRpYWxp emU6IGZ1bmN0aW9uKGF0dHJzLCBhcmdzKSB7CkBAIC0zMzAsMTIgKzMzOSwzNyBAQCBkZWZpbmUo J3BnYWRtaW4ubm9kZS50YWJsZScsIFsKICAgICAgICAgICAgIHJldHVybiAoIShkICYmIGQubGFi ZWwubWF0Y2goL3BnX2dsb2JhbC8pKSkKICAgICAgICAgICB9CiAgICAgICAgIH0seworICAgICAg ICAgIGlkOiAncGFydGl0aW9uJywgdHlwZTogJ2dyb3VwJywgbGFiZWw6IGdldHRleHQoJ1BhcnRp dGlvbicpLAorICAgICAgICAgIG1vZGU6IFsnZWRpdCcsICdjcmVhdGUnXSwgbWluX3ZlcnNpb246 IDEwMDAwMCwKKyAgICAgICAgICB2aXNpYmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICAv LyBBbHdheXMgc2hvdyBpbiBjYXNlIG9mIGNyZWF0ZSBtb2RlCisgICAgICAgICAgICBpZiAobS5p c05ldygpIHx8IG0uZ2V0KCdpc19wYXJ0aXRpb25lZCcpKQorICAgICAgICAgICAgICByZXR1cm4g dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgIH0s eworICAgICAgICAgIGlkOiAnaXNfcGFydGl0aW9uZWQnLCBsYWJlbDpnZXR0ZXh0KCdQYXJ0aXRp b25lZCBUYWJsZT8nKSwgY2VsbDogJ3N3aXRjaCcsCisgICAgICAgICAgdHlwZTogJ3N3aXRjaCcs IG1vZGU6IFsncHJvcGVydGllcycsICdjcmVhdGUnLCAnZWRpdCddLAorICAgICAgICAgIHZpc2li bGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKG0ubm9kZV9p bmZvKSAmJiAhXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mby5zZXJ2ZXIpCisgICAgICAgICAgICAg ICYmICFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvLnNlcnZlci52ZXJzaW9uKSAmJgorICAgICAg ICAgICAgICBtLm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lvbiA+PSAxMDAwMDApCisgICAgICAgICAg ICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg fSwKKyAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgaWYgKCFt LmlzTmV3KCkpCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJu IGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAgfSx7CiAgICAgICAgICAgaWQ6ICdkZXNjcmlw dGlvbicsIGxhYmVsOiBnZXR0ZXh0KCdDb21tZW50JyksIHR5cGU6ICdtdWx0aWxpbmUnLAogICAg ICAgICAgIG1vZGU6IFsncHJvcGVydGllcycsICdjcmVhdGUnLCAnZWRpdCddLCBkaXNhYmxlZDog J2luU2NoZW1hJwogICAgICAgICB9LHsKICAgICAgICAgICBpZDogJ2NvbGxfaW5oZXJpdHMnLCBs YWJlbDogZ2V0dGV4dCgnSW5oZXJpdGVkIGZyb20gdGFibGUocyknKSwKICAgICAgICAgICB1cmw6 ICdnZXRfaW5oZXJpdHMnLCB0eXBlOiAnYXJyYXknLCBncm91cDogZ2V0dGV4dCgnQ29sdW1ucycp LAotICAgICAgICAgIGRpc2FibGVkOiAnY2hlY2tJbmhlcml0YW5jZScsIGRlcHM6IFsndHlwbmFt ZSddLAorICAgICAgICAgIGRpc2FibGVkOiAnY2hlY2tJbmhlcml0YW5jZScsIGRlcHM6IFsndHlw bmFtZScsICdpc19wYXJ0aXRpb25lZCddLAogICAgICAgICAgIG1vZGU6IFsnY3JlYXRlJywgJ2Vk aXQnXSwKICAgICAgICAgICBzZWxlY3QyOiB7IG11bHRpcGxlOiB0cnVlLCBhbGxvd0NsZWFyOiB0 cnVlLAogICAgICAgICAgIHBsYWNlaG9sZGVyOiBnZXR0ZXh0KCdTZWxlY3QgdG8gaW5oZXJpdCBm cm9tLi4uJyl9LApAQCAtNDMyLDcgKzQ2NiwyNiBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS50YWJs ZScsIFsKICAgICAgICAgICBtb2RlbDogcGdCcm93c2VyLk5vZGVzWydjb2x1bW4nXS5tb2RlbCwK ICAgICAgICAgICBzdWJub2RlOiBwZ0Jyb3dzZXIuTm9kZXNbJ2NvbHVtbiddLm1vZGVsLAogICAg ICAgICAgIG1vZGU6IFsnY3JlYXRlJywgJ2VkaXQnXSwKLSAgICAgICAgICBkaXNhYmxlZDogJ2lu U2NoZW1hJywgZGVwczogWyd0eXBuYW1lJ10sCisgICAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9u KG0pIHsKKyAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgcGFydGl0aW9uZWQgdGFibGUgcmVtb3Zl IGluaGVyaXRlZCBjb2x1bW5zCisgICAgICAgICAgICBpZiAobS5pc05ldygpICYmIG0uZ2V0KCdp c19wYXJ0aXRpb25lZCcpKSB7CisgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7 CisgICAgICAgICAgICAgICAgdmFyIGNvbGwgPSBtLmdldCgnY29sdW1ucycpOworICAgICAgICAg ICAgICAgIGNvbGwucmVtb3ZlKGNvbGwuZmlsdGVyKGZ1bmN0aW9uKG1vZGVsKSB7CisgICAgICAg ICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChtb2RlbC5nZXQoJ2luaGVyaXRlZGZyb20nKSkp CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgIHJl dHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgfSwgMTApOwor ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZih0aGlzLm5vZGVfaW5mbyAmJiAgJ2NhdGFs b2cnIGluIHRoaXMubm9kZV9pbmZvKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXR1 cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg ICAgICB9LAorICAgICAgICAgIGRlcHM6IFsndHlwbmFtZScsICdpc19wYXJ0aXRpb25lZCddLAog ICAgICAgICAgIGNhbkFkZDogJ2NoZWNrX2dyaWRfYWRkX2NvbmRpdGlvbicsCiAgICAgICAgICAg Y2FuRWRpdDogdHJ1ZSwgY2FuRGVsZXRlOiB0cnVlLAogICAgICAgICAgIC8vIEZvciBlYWNoIHJv dyBlZGl0L2RlbGV0ZSBidXR0b24gZW5hYmxlL2Rpc2FibGUKQEAgLTUzNSwxMCArNTg4LDIyIEBA IGRlZmluZSgncGdhZG1pbi5ub2RlLnRhYmxlJywgWwogICAgICAgICAgICAgICBzdWJub2RlOiBw Z0Jyb3dzZXIuTm9kZXNbJ3ByaW1hcnlfa2V5J10ubW9kZWwsCiAgICAgICAgICAgICAgIGVkaXRh YmxlOiBmYWxzZSwgdHlwZTogJ2NvbGxlY3Rpb24nLAogICAgICAgICAgICAgICBncm91cDogZ2V0 dGV4dCgnUHJpbWFyeSBLZXknKSwgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLAotICAgICAgICAg ICAgICBjYW5FZGl0OiB0cnVlLCBjYW5EZWxldGU6IHRydWUsCisgICAgICAgICAgICAgIGNhbkVk aXQ6IHRydWUsIGNhbkRlbGV0ZTogdHJ1ZSwgZGVwczpbJ2lzX3BhcnRpdGlvbmVkJ10sCiAgICAg ICAgICAgICAgIGNvbnRyb2w6ICd1bmlxdWUtY29sLWNvbGxlY3Rpb24nLAogICAgICAgICAgICAg ICBjb2x1bW5zIDogWyduYW1lJywgJ2NvbHVtbnMnXSwKLSAgICAgICAgICAgICAgY2FuQWRkOiB0 cnVlLAorICAgICAgICAgICAgICBjYW5BZGQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgICAg ICBpZiAobS5nZXQoJ2lzX3BhcnRpdGlvbmVkJykpIHsKKyAgICAgICAgICAgICAgICAgIHNldFRp bWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjb2xsID0gbS5nZXQo J3ByaW1hcnlfa2V5Jyk7CisgICAgICAgICAgICAgICAgICAgIGNvbGwucmVtb3ZlKGNvbGwuZmls dGVyKGZ1bmN0aW9uKG1vZGVsKSB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7 CisgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICAgIH0sIDEwKTsKKyAg ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAg Y2FuQWRkUm93OiBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAvLyBVc2VyIGNhbiBvbmx5 IGFkZCBvbmUgcHJpbWFyeSBrZXkKICAgICAgICAgICAgICAgIHZhciBjb2x1bW5zID0gbS5nZXQo J2NvbHVtbnMnKTsKQEAgLTU1Myw5ICs2MTgsMjEgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFi bGUnLCBbCiAgICAgICAgICAgICAgIHN1Ym5vZGU6IHBnQnJvd3Nlci5Ob2Rlc1snZm9yZWlnbl9r ZXknXS5tb2RlbCwKICAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLCB0eXBlOiAnY29sbGVj dGlvbicsCiAgICAgICAgICAgICAgIGdyb3VwOiBnZXR0ZXh0KCdGb3JlaWduIEtleScpLCBtb2Rl OiBbJ2VkaXQnLCAnY3JlYXRlJ10sCi0gICAgICAgICAgICAgIGNhbkVkaXQ6IHRydWUsIGNhbkRl bGV0ZTogdHJ1ZSwKKyAgICAgICAgICAgICAgY2FuRWRpdDogdHJ1ZSwgY2FuRGVsZXRlOiB0cnVl LCBkZXBzOlsnaXNfcGFydGl0aW9uZWQnXSwKICAgICAgICAgICAgICAgY29udHJvbDogJ3VuaXF1 ZS1jb2wtY29sbGVjdGlvbicsCi0gICAgICAgICAgICAgIGNhbkFkZDogdHJ1ZSwKKyAgICAgICAg ICAgICAgY2FuQWRkOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICAgICAgaWYgKG0uZ2V0KCdp c19wYXJ0aXRpb25lZCcpKSB7CisgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u KCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgY29sbCA9IG0uZ2V0KCdmb3JlaWduX2tleScp OworICAgICAgICAgICAgICAgICAgICBjb2xsLnJlbW92ZShjb2xsLmZpbHRlcihmdW5jdGlvbiht b2RlbCkgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg ICAgICAgICB9KSk7CisgICAgICAgICAgICAgICAgICB9LCAxMCk7CisgICAgICAgICAgICAgICAg ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0 dXJuIHRydWU7CisgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgIGNvbHVtbnMgOiBbJ25h bWUnLCAnY29sdW1ucyddLAogICAgICAgICAgICAgICBjYW5BZGRSb3c6IGZ1bmN0aW9uKG0pIHsK ICAgICAgICAgICAgICAgIC8vIFVzZXIgY2FuIG9ubHkgYWRkIGlmIHRoZXJlIGlzIGF0IGxlYXN0 IG9uZSBjb2x1bW4gd2l0aCBuYW1lLgpAQCAtNTY4LDcgKzY0NSw3IEBAIGRlZmluZSgncGdhZG1p bi5ub2RlLnRhYmxlJywgWwogICAgICAgICAgICAgICBzdWJub2RlOiBwZ0Jyb3dzZXIuTm9kZXNb J2NoZWNrX2NvbnN0cmFpbnRzJ10ubW9kZWwsCiAgICAgICAgICAgICAgIGVkaXRhYmxlOiBmYWxz ZSwgdHlwZTogJ2NvbGxlY3Rpb24nLAogICAgICAgICAgICAgICBncm91cDogZ2V0dGV4dCgnQ2hl Y2snKSwgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLAotICAgICAgICAgICAgICBjYW5FZGl0OiB0 cnVlLCBjYW5EZWxldGU6IHRydWUsCisgICAgICAgICAgICAgIGNhbkVkaXQ6IHRydWUsIGNhbkRl bGV0ZTogdHJ1ZSwgZGVwczpbJ2lzX3BhcnRpdGlvbmVkJ10sCiAgICAgICAgICAgICAgIGNvbnRy b2w6ICd1bmlxdWUtY29sLWNvbGxlY3Rpb24nLAogICAgICAgICAgICAgICBjYW5BZGQ6IHRydWUs CiAgICAgICAgICAgICAgIGNvbHVtbnMgOiBbJ25hbWUnLCAnY29uc3JjJ10KQEAgLTU3OCwxMCAr NjU1LDIyIEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnRhYmxlJywgWwogICAgICAgICAgICAgICBz dWJub2RlOiBwZ0Jyb3dzZXIuTm9kZXNbJ3VuaXF1ZV9jb25zdHJhaW50J10ubW9kZWwsCiAgICAg ICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSwgdHlwZTogJ2NvbGxlY3Rpb24nLAogICAgICAgICAg ICAgICBncm91cDogZ2V0dGV4dCgnVW5pcXVlJyksIG1vZGU6IFsnZWRpdCcsICdjcmVhdGUnXSwK LSAgICAgICAgICAgICAgY2FuRWRpdDogdHJ1ZSwgY2FuRGVsZXRlOiB0cnVlLAorICAgICAgICAg ICAgICBjYW5FZGl0OiB0cnVlLCBjYW5EZWxldGU6IHRydWUsIGRlcHM6Wydpc19wYXJ0aXRpb25l ZCddLAogICAgICAgICAgICAgICBjb250cm9sOiAndW5pcXVlLWNvbC1jb2xsZWN0aW9uJywKICAg ICAgICAgICAgICAgY29sdW1ucyA6IFsnbmFtZScsICdjb2x1bW5zJ10sCi0gICAgICAgICAgICAg IGNhbkFkZDogdHJ1ZSwKKyAgICAgICAgICAgICAgY2FuQWRkOiBmdW5jdGlvbihtKSB7CisgICAg ICAgICAgICAgICAgaWYgKG0uZ2V0KCdpc19wYXJ0aXRpb25lZCcpKSB7CisgICAgICAgICAgICAg ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgY29s bCA9IG0uZ2V0KCd1bmlxdWVfY29uc3RyYWludCcpOworICAgICAgICAgICAgICAgICAgICBjb2xs LnJlbW92ZShjb2xsLmZpbHRlcihmdW5jdGlvbihtb2RlbCkgeworICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAg ICAgICB9LCAxMCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg ICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgIH0s CiAgICAgICAgICAgICAgIGNhbkFkZFJvdzogZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAg Ly8gVXNlciBjYW4gb25seSBhZGQgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNvbHVtbiB3aXRo IG5hbWUuCiAgICAgICAgICAgICAgICB2YXIgY29sdW1ucyA9IG0uZ2V0KCdjb2x1bW5zJyk7CkBA IC01OTMsMTAgKzY4MiwyMiBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS50YWJsZScsIFsKICAgICAg ICAgICAgICAgc3Vibm9kZTogcGdCcm93c2VyLk5vZGVzWydleGNsdXNpb25fY29uc3RyYWludCdd Lm1vZGVsLAogICAgICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsIHR5cGU6ICdjb2xsZWN0aW9u JywKICAgICAgICAgICAgICAgZ3JvdXA6IGdldHRleHQoJ0V4Y2x1ZGUnKSwgbW9kZTogWydlZGl0 JywgJ2NyZWF0ZSddLAotICAgICAgICAgICAgICBjYW5FZGl0OiB0cnVlLCBjYW5EZWxldGU6IHRy dWUsCisgICAgICAgICAgICAgIGNhbkVkaXQ6IHRydWUsIGNhbkRlbGV0ZTogdHJ1ZSwgZGVwczpb J2lzX3BhcnRpdGlvbmVkJ10sCiAgICAgICAgICAgICAgIGNvbnRyb2w6ICd1bmlxdWUtY29sLWNv bGxlY3Rpb24nLAogICAgICAgICAgICAgICBjb2x1bW5zIDogWyduYW1lJywgJ2NvbHVtbnMnLCAn Y29uc3RyYWludCddLAotICAgICAgICAgICAgICBjYW5BZGQ6IHRydWUsCisgICAgICAgICAgICAg IGNhbkFkZDogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgICAgIGlmIChtLmdldCgnaXNfcGFy dGl0aW9uZWQnKSkgeworICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsK KyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbGwgPSBtLmdldCgnZXhjbHVkZV9jb25zdHJhaW50 Jyk7CisgICAgICAgICAgICAgICAgICAgIGNvbGwucmVtb3ZlKGNvbGwuZmlsdGVyKGZ1bmN0aW9u KG1vZGVsKSB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg ICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICAgIH0sIDEwKTsKKyAgICAgICAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgY2FuQWRkUm93OiBm dW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAvLyBVc2VyIGNhbiBvbmx5IGFkZCBpZiB0aGVy ZSBpcyBhdCBsZWFzdCBvbmUgY29sdW1uIHdpdGggbmFtZS4KICAgICAgICAgICAgICAgIHZhciBj b2x1bW5zID0gbS5nZXQoJ2NvbHVtbnMnKTsKQEAgLTYwNyw3ICs3MDgsNyBAQCBkZWZpbmUoJ3Bn YWRtaW4ubm9kZS50YWJsZScsIFsKICAgICAgICAgICBpZDogJ3R5cG5hbWUnLCBsYWJlbDogZ2V0 dGV4dCgnT2YgdHlwZScpLCB0eXBlOiAndGV4dCcsCiAgICAgICAgICAgY29udHJvbDogJ25vZGUt YWpheC1vcHRpb25zJywgbW9kZTogWydwcm9wZXJ0aWVzJywgJ2NyZWF0ZScsICdlZGl0J10sCiAg ICAgICAgICAgZGlzYWJsZWQ6ICdjaGVja09mVHlwZScsIHVybDogJ2dldF9vZnR5cGUnLCBncm91 cDogZ2V0dGV4dCgnQWR2YW5jZWQnKSwKLSAgICAgICAgICBkZXBzOiBbJ2NvbGxfaW5oZXJpdHMn XSwgdHJhbnNmb3JtOiBmdW5jdGlvbihkYXRhLCBjZWxsKSB7CisgICAgICAgICAgZGVwczogWydj b2xsX2luaGVyaXRzJywgJ2lzX3BhcnRpdGlvbmVkJ10sIHRyYW5zZm9ybTogZnVuY3Rpb24oZGF0 YSwgY2VsbCkgewogICAgICAgICAgICAgdmFyIGNvbnRyb2wgPSBjZWxsIHx8IHRoaXMsCiAgICAg ICAgICAgICAgIG0gPSBjb250cm9sLm1vZGVsOwogICAgICAgICAgICAgICBtLm9mX3R5cGVzX3Rh YmxlcyA9IGRhdGE7CkBAIC03MTEsMTAgKzgxMiwyMTYgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUu dGFibGUnLCBbCiAgICAgICAgICAgICBkaXNhYmxlZDogJ2lzTGlrZURpc2FibGUnLCBncm91cDog Z2V0dGV4dCgnTGlrZScpCiAgICAgICAgICAgfV0KICAgICAgICAgfSx7CisgICAgICAgICAgaWQ6 ICdwYXJ0aXRpb25fdHlwZScsIGxhYmVsOmdldHRleHQoJ1BhcnRpdGlvbiBUeXBlJyksCisgICAg ICAgICAgZWRpdGFibGU6IGZhbHNlLCB0eXBlOiAnc2VsZWN0MicsIHNlbGVjdDI6IHthbGxvd0Ns ZWFyOiBmYWxzZX0sCisgICAgICAgICAgZ3JvdXA6ICdwYXJ0aXRpb24nLCBkZXBzOiBbJ2lzX3Bh cnRpdGlvbmVkJ10sCisgICAgICAgICAgb3B0aW9uczpbeworICAgICAgICAgICAgbGFiZWw6ICdS YW5nZScsIHZhbHVlOiAncmFuZ2UnCisgICAgICAgICAgfSx7CisgICAgICAgICAgICBsYWJlbDog J0xpc3QnLCB2YWx1ZTogJ2xpc3QnCisgICAgICAgICAgfV0sCisgICAgICAgICAgbW9kZTpbJ2Ny ZWF0ZSddLAorICAgICAgICAgIHZpc2libGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlm KCFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvKSAmJiAhXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5m by5zZXJ2ZXIpCisgICAgICAgICAgICAgICYmICFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvLnNl cnZlci52ZXJzaW9uKSAmJgorICAgICAgICAgICAgICBtLm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lv biA+PSAxMDAwMDApCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7CisgICAgICAgICAgfSwKKyAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24o bSkgeworICAgICAgICAgICAgaWYgKCFtLmlzTmV3KCkgfHwgIW0uZ2V0KCdpc19wYXJ0aXRpb25l ZCcpKQorICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0seworICAgICAgICAgIGlkOiAncGFydGl0aW9uX2tl eXMnLCBsYWJlbDpnZXR0ZXh0KCdQYXJ0aXRpb24gS2V5cycpLAorICAgICAgICAgIG1vZGVsOiBC YWNrZm9ybS5QYXJ0aXRpb25LZXlNb2RlbCwKKyAgICAgICAgICBzdWJub2RlOiBCYWNrZm9ybS5Q YXJ0aXRpb25LZXlNb2RlbCwKKyAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSwgdHlwZTogJ2NvbGxl Y3Rpb24nLAorICAgICAgICAgIGdyb3VwOiAncGFydGl0aW9uJywgbW9kZTogWydjcmVhdGUnXSwK KyAgICAgICAgICBkZXBzOiBbJ2lzX3BhcnRpdGlvbmVkJywgJ3BhcnRpdGlvbl90eXBlJ10sCisg ICAgICAgICAgY2FuRWRpdDogZmFsc2UsIGNhbkRlbGV0ZTogdHJ1ZSwKKyAgICAgICAgICBjb250 cm9sOiAnc3ViLW5vZGUtY29sbGVjdGlvbicsCisgICAgICAgICAgY2FuQWRkOiBmdW5jdGlvbiht KSB7CisgICAgICAgICAgICBpZiAobS5pc05ldygpICYmIG0uZ2V0KCdpc19wYXJ0aXRpb25lZCcp KQorICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK KyAgICAgICAgICB9LAorICAgICAgICAgIGNhbkFkZFJvdzogZnVuY3Rpb24obSkgeworICAgICAg ICAgICAgdmFyIGNvbHVtbnMgPSBtLmdldCgnY29sdW1ucycpOworICAgICAgICAgICAgdmFyIG1h eF9yb3dfY291bnQgPSAxMDAwOworCisgICAgICAgICAgICBpZiAobS5nZXQoJ3BhcnRpdGlvbl90 eXBlJykgJiYgbS5nZXQoJ3BhcnRpdGlvbl90eXBlJykgPT0gJ2xpc3QnKQorICAgICAgICAgICAg ICBtYXhfcm93X2NvdW50ID0gMTsKKworICAgICAgICAgICAgcmV0dXJuIChtLmdldCgncGFydGl0 aW9uX2tleXMnKSAmJgorICAgICAgICAgICAgICAgIG0uZ2V0KCdwYXJ0aXRpb25fa2V5cycpLmxl bmd0aCA8IG1heF9yb3dfY291bnQgJiYKKyAgICAgICAgICAgICAgICBfLnNvbWUoY29sdW1ucy5w bHVjaygnbmFtZScpKQorICAgICAgICAgICAgKTsKKyAgICAgICAgICB9LAorICAgICAgICAgIHZp c2libGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKG0ubm9k ZV9pbmZvKSAmJiAhXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mby5zZXJ2ZXIpCisgICAgICAgICAg ICAgICYmICFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvLnNlcnZlci52ZXJzaW9uKSAmJgorICAg ICAgICAgICAgICBtLm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lvbiA+PSAxMDAwMDApCisgICAgICAg ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg ICAgfSwKKyAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgaWYg KG0uZ2V0KCdwYXJ0aXRpb25fa2V5cycpICYmIG0uZ2V0KCdwYXJ0aXRpb25fa2V5cycpLm1vZGVs cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewor ICAgICAgICAgICAgICAgIHZhciBjb2xsID0gbS5nZXQoJ3BhcnRpdGlvbl9rZXlzJyk7CisgICAg ICAgICAgICAgICAgY29sbC5yZW1vdmUoY29sbC5maWx0ZXIoZnVuY3Rpb24obW9kZWwpIHsKKyAg ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pKTsKKyAgICAg ICAgICAgICAgfSwgMTApOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSx7 CisgICAgICAgICAgaWQ6ICdwYXJ0aXRpb25fc2NoZW1lJywgbGFiZWw6IGdldHRleHQoJ1BhcnRp dGlvbiBTY2hlbWUnKSwKKyAgICAgICAgICB0eXBlOiAnbm90ZScsIGdyb3VwOiAncGFydGl0aW9u JywgbW9kZTogWydlZGl0J10sCisgICAgICAgICAgdmlzaWJsZTogZnVuY3Rpb24obSkgeworICAg ICAgICAgICAgaWYoIV8uaXNVbmRlZmluZWQobS5ub2RlX2luZm8pICYmICFfLmlzVW5kZWZpbmVk KG0ubm9kZV9pbmZvLnNlcnZlcikKKyAgICAgICAgICAgICAgJiYgIV8uaXNVbmRlZmluZWQobS5u b2RlX2luZm8uc2VydmVyLnZlcnNpb24pICYmCisgICAgICAgICAgICAgIG0ubm9kZV9pbmZvLnNl cnZlci52ZXJzaW9uID49IDEwMDAwMCkKKyAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9LAorICAgICAgICAgIGRpc2FibGVk OiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBpZiAoIW0uaXNOZXcoKSkgeworICAgICAgICAg ICAgICB0aGlzLnRleHQgPSBtLmdldCgncGFydGl0aW9uX3NjaGVtZScpOworICAgICAgICAgICAg fQorICAgICAgICAgIH0KKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdwYXJ0aXRpb25fa2V5 X25vdGUnLCBsYWJlbDogZ2V0dGV4dCgnUGFydGl0aW9uIEtleXMnKSwKKyAgICAgICAgICB0eXBl OiAnbm90ZScsIGdyb3VwOiAncGFydGl0aW9uJywgbW9kZTogWydjcmVhdGUnXSwKKyAgICAgICAg ICB0ZXh0OiBbCisgICAgICAgICAgICAnPGJyPicsCisgICAgICAgICAgICBnZXR0ZXh0KCdQYXJ0 aXRpb24gdGFibGUgc3VwcG9ydHMgdHdvIHR5cGVzIG9mIGtleXM6JyksCisgICAgICAgICAgICAn PGJyPjx1bD48bGk+JywKKyAgICAgICAgICAgIGdldHRleHQoJ0NvbHVtbjogVXNlciBjYW4gc2Vs ZWN0IGFueSBjb2x1bW4gZnJvbSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgY29sdW1ucy4nKSwKKyAg ICAgICAgICAgICc8L2xpPjxsaT4nLAorICAgICAgICAgICAgZ2V0dGV4dCgnRXhwcmVzc2lvbjog VXNlciBjYW4gc3BlY2lmeSBleHByZXNzaW9uIHRvIGNyZWF0ZSBwYXJ0aXRpb24ga2V5LicpLAor ICAgICAgICAgICAgJzxicj48cD4nLAorICAgICAgICAgICAgZ2V0dGV4dCgnRXhhbXBsZScpLAor ICAgICAgICAgICAgJzonLAorICAgICAgICAgICAgZ2V0dGV4dCgiTGV0J3Mgc2F5LCB3ZSB3YW50 IHRvIGNyZWF0ZSBhIHBhcnRpdGlvbiB0YWJsZSBiYXNlZCBwZXIgeWVhciBmb3IgdGhlIGNvbHVt biAnc2FsZWRhdGUnLCBoYXZpbmcgZGF0YXR5cGUgJ2RhdGUvdGltZXN0YW1wJywgdGhlbiB3ZSBu ZWVkIHRvIHNwZWNpZnkgdGhlIGV4cHJlc3Npb24gYXMgJ2V4dHJhY3QoWUVBUiBmcm9tIHNhbGVk YXRlKScgYXMgcGFydGl0aW9uIGtleS4iKSwKKyAgICAgICAgICAgICc8L3A+PC9saT48L3VsPicK KyAgICAgICAgICBdLmpvaW4oJycpLAorICAgICAgICAgIHZpc2libGU6IGZ1bmN0aW9uKG0pIHsK KyAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvKSAmJiAhXy5pc1VuZGVm aW5lZChtLm5vZGVfaW5mby5zZXJ2ZXIpCisgICAgICAgICAgICAgICYmICFfLmlzVW5kZWZpbmVk KG0ubm9kZV9pbmZvLnNlcnZlci52ZXJzaW9uKSAmJgorICAgICAgICAgICAgICBtLm5vZGVfaW5m by5zZXJ2ZXIudmVyc2lvbiA+PSAxMDAwMDApCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICB9LCB7Cisg ICAgICAgICAgaWQ6ICdwYXJ0aXRpb25zJywgbGFiZWw6Z2V0dGV4dCgnUGFydGl0aW9ucycpLAor ICAgICAgICAgIG1vZGVsOiBCYWNrZm9ybS5QYXJ0aXRpb25zTW9kZWwsCisgICAgICAgICAgc3Vi bm9kZTogQmFja2Zvcm0uUGFydGl0aW9uc01vZGVsLAorICAgICAgICAgIGVkaXRhYmxlOiB0cnVl LCB0eXBlOiAnY29sbGVjdGlvbicsCisgICAgICAgICAgZ3JvdXA6ICdwYXJ0aXRpb24nLCBtb2Rl OiBbJ2VkaXQnLCAnY3JlYXRlJ10sCisgICAgICAgICAgZGVwczogWydpc19wYXJ0aXRpb25lZCcs ICdwYXJ0aXRpb25fdHlwZSddLAorICAgICAgICAgIGNhbkVkaXQ6IGZhbHNlLCBjYW5EZWxldGU6 IHRydWUsCisgICAgICAgICAgY3VzdG9tRGVsZXRlVGl0bGU6IGdldHRleHQoJ0RldGFjaCBQYXJ0 aXRpb24nKSwKKyAgICAgICAgICBjdXN0b21EZWxldGVNc2c6IGdldHRleHQoJ0FyZSB5b3Ugc3Vy ZSB5b3Ugd2lzaCB0byBkZXRhY2ggdGhpcyBwYXJ0aXRpb24/JyksCisgICAgICAgICAgY29sdW1u czpbJ2lzX2F0dGFjaCcsICdwYXJ0aXRpb25fbmFtZScsICd2YWx1ZXNfZnJvbScsICd2YWx1ZXNf dG8nLCAndmFsdWVzX2luJ10sCisgICAgICAgICAgY29udHJvbDogQmFja2Zvcm0uU3ViTm9kZUNv bGxlY3Rpb25Db250cm9sLmV4dGVuZCh7CisgICAgICAgICAgICByb3c6IEJhY2tncmlkLlBhcnRp dGlvblJvdywKKyAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkgeworICAgICAgICAg ICAgICBCYWNrZm9ybS5TdWJOb2RlQ29sbGVjdGlvbkNvbnRyb2wucHJvdG90eXBlLmluaXRpYWxp emUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlz OworICAgICAgICAgICAgICBpZiAoIXRoaXMubW9kZWwuaXNOZXcoKSkgeworICAgICAgICAgICAg ICAgIHZhciBub2RlID0gdGhpcy5maWVsZC5nZXQoJ3NjaGVtYV9ub2RlJyksCisgICAgICAgICAg ICAgICAgICAgIG5vZGVfaW5mbyA9IHRoaXMuZmllbGQuZ2V0KCdub2RlX2luZm8nKTsKKworICAg ICAgICAgICAgICAgIC8vIE1ha2UgYWpheCBjYWxsIHRvIGdldCB0aGUgdGFibGVzIHRvIGJlIGF0 dGFjaGVkCisgICAgICAgICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgICAgICAgIHVybDog bm9kZS5nZW5lcmF0ZV91cmwuYXBwbHkoCisgICAgICAgICAgICAgICAgICAgICAgbm9kZSwgWwor ICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgJ2dldF9hdHRhY2hfdGFibGVzJywgdGhpcy5m aWVsZC5nZXQoJ25vZGVfZGF0YScpLAorICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgbm9k ZV9pbmZvCisgICAgICAgICAgICAgICAgICAgICAgXSksCisKKyAgICAgICAgICAgICAgICAgIHR5 cGU6ICdHRVQnLAorICAgICAgICAgICAgICAgICAgYXN5bmM6IGZhbHNlLAorICAgICAgICAgICAg ICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChy ZXMuc3VjY2VzcyA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC50YWJs ZV9vcHRpb25zID0gcmVzLmRhdGE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoCisg ICAgICAgICAgICAgICAgICAgICAgICAnRXJyb3IgZmV0Y2hpbmcgdGFibGVzIHRvIGJlIGF0dGFj aGVkJywgcmVzLmRhdGEucmVzdWx0CisgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgIGVy cm9yOiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBlcnJtc2cgPSAkLnBh cnNlSlNPTihlLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmFs ZXJ0KCdFcnJvciBmZXRjaGluZyB0YWJsZXMgdG8gYmUgYXR0YWNoZWQuJywgZXJybXNnLmVycm9y bXNnKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICApLAorICAgICAg ICAgIGNhbkFkZDogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgaWYgKG0uZ2V0KCdpc19wYXJ0 aXRpb25lZCcpKQorICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy biBmYWxzZTsKKyAgICAgICAgICB9LAorICAgICAgICAgIHZpc2libGU6IGZ1bmN0aW9uKG0pIHsK KyAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvKSAmJiAhXy5pc1VuZGVm aW5lZChtLm5vZGVfaW5mby5zZXJ2ZXIpCisgICAgICAgICAgICAgICYmICFfLmlzVW5kZWZpbmVk KG0ubm9kZV9pbmZvLnNlcnZlci52ZXJzaW9uKSAmJgorICAgICAgICAgICAgICBtLm5vZGVfaW5m by5zZXJ2ZXIudmVyc2lvbiA+PSAxMDAwMDApCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfSwKKyAgICAgICAgICBkaXNh YmxlZDogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgaWYgKG0uaXNOZXcoKSAmJiBtLmdldCgn cGFydGl0aW9ucycpICYmIG0uZ2V0KCdwYXJ0aXRpb25zJykubW9kZWxzLmxlbmd0aCA+IDApIHsK KyAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAg dmFyIGNvbGwgPSBtLmdldCgncGFydGl0aW9ucycpOworICAgICAgICAgICAgICAgIGNvbGwucmVt b3ZlKGNvbGwuZmlsdGVyKGZ1bmN0aW9uKG1vZGVsKSB7CisgICAgICAgICAgICAgICAgICByZXR1 cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAgIH0sIDEwKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0seworICAgICAgICAgIGlkOiAncGFy dGl0aW9uX25vdGUnLCBsYWJlbDogZ2V0dGV4dCgnUGFydGl0aW9ucycpLAorICAgICAgICAgIHR5 cGU6ICdub3RlJywgZ3JvdXA6ICdwYXJ0aXRpb24nLAorICAgICAgICAgIHRleHQ6IFsKKyAgICAg ICAgICAgICc8dWw+JywKKyAgICAgICAgICAgICcgPGxpPicsCisgICAgICAgICAgICBnZXR0ZXh0 KCdDcmVhdGUgYSB0YWJsZTogVXNlciBjYW4gY3JlYXRlIG11bHRpcGxlIHBhcnRpdGlvbnMgd2hp bGUgY3JlYXRpbmcgbmV3IHBhcnRpdGlvbmVkIHRhYmxlLiBPcGVyYXRpb24gc3dpdGNoIGlzIGRp c2FibGVkIGluIHRoaXMgc2NlbmFyaW8uJyksCisgICAgICAgICAgICAnPC9saT48bGk+JywKKyAg ICAgICAgICAgIGdldHRleHQoJ0VkaXQgZXhpc3RpbmcgdGFibGU6IFVzZXIgY2FuIGNyZWF0ZS9h dHRhY2gvZGV0YWNoIG11bHRpcGxlIHBhcnRpdGlvbnMuIEluIGF0dGFjaCBvcGVyYXRpb24gdXNl ciBjYW4gc2VsZWN0IHRhYmxlIGZyb20gdGhlIGxpc3Qgb2Ygc3VpdGFibGUgdGFibGVzIHRvIGJl IGF0dGFjaGVkLicpLAorICAgICAgICAgICAgJzwvbGk+PGxpPicsCisgICAgICAgICAgICBnZXR0 ZXh0KCdGcm9tL1RvL0luIGlucHV0OiBWYWx1ZXMgZm9yIHRoZXNlIGZpZWxkcyBtdXN0IGJlIHF1 b3RlZCB3aXRoIHNpbmdsZSBxdW90ZS4gRm9yIG1vcmUgdGhhbiBvbmUgcGFydGl0aW9uIGtleSB2 YWx1ZXMgbXVzdCBiZSBjb21tYSgsKSBzZXBhcmF0ZWQuJyksCisgICAgICAgICAgICAnPGJyPics CisgICAgICAgICAgICBnZXR0ZXh0KCdFeGFtcGxlJyksCisgICAgICAgICAgICAnOjx1bD48bGk+ JywKKyAgICAgICAgICAgIGdldHRleHQoIkZyb20vVG86IEVuYWJsZWQgZm9yIHJhbmdlIHBhcnRp dGlvbi4gQ29uc2lkZXIgcGFydGl0aW9uZWQgdGFibGUgd2l0aCBtdWx0aXBsZSBrZXlzIG9mIHR5 cGUgSW50ZWdlciwgdGhlbiB2YWx1ZXMgc2hvdWxkIGJlIHNwZWNpZmllZCBsaWtlICcxMDAnLCcy MDAnLiIpLAorICAgICAgICAgICAgJzwvbGk+PGxpPiAnLAorICAgICAgICAgICAgZ2V0dGV4dCgn SW46IEVuYWJsZWQgZm9yIGxpc3QgcGFydGl0aW9uLiBWYWx1ZXMgbXVzdCBiZSBjb21tYSgsKSBz ZXBhcmF0ZWQgYW5kIHF1b3RlZCB3aXRoIHNpbmdsZSBxdW90ZS4nKSwKKyAgICAgICAgICAgICc8 L2xpPjwvdWw+PC9saT48L3VsPicKKyAgICAgICAgICBdLmpvaW4oJycpLAorICAgICAgICAgIHZp c2libGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKG0ubm9k ZV9pbmZvKSAmJiAhXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mby5zZXJ2ZXIpCisgICAgICAgICAg ICAgICYmICFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvLnNlcnZlci52ZXJzaW9uKSAmJgorICAg ICAgICAgICAgICBtLm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lvbiA+PSAxMDAwMDApCisgICAgICAg ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg ICAgfQorICAgICAgICB9LHsKICAgICAgICAgICAvLyBIZXJlIC0gd2Ugd2lsbCBjcmVhdGUgdGFi IGNvbnRyb2wgZm9yIHN0b3JhZ2UgcGFyYW1ldGVycwogICAgICAgICAgIC8vIChhdXRvIHZhY3V1 bSkuCiAgICAgICAgICAgdHlwZTogJ25lc3RlZCcsIGNvbnRyb2w6ICd0YWInLCBncm91cDogZ2V0 dGV4dCgnUGFyYW1ldGVyJyksCi0gICAgICAgICAgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLAor ICAgICAgICAgIG1vZGU6IFsnZWRpdCcsICdjcmVhdGUnXSwgZGVwczogWydpc19wYXJ0aXRpb25l ZCddLAogICAgICAgICAgIHNjaGVtYTogQmFja2Zvcm0uVmFjdXVtU2V0dGluZ3NTY2hlbWEKICAg ICAgICAgfSx7CiAgICAgICAgICAgaWQ6ICdyZWxhY2xfc3RyJywgbGFiZWw6IGdldHRleHQoJ1By aXZpbGVnZXMnKSwgZGlzYWJsZWQ6ICdpblNjaGVtYScsCkBAIC03NDEsMzUgKzEwNDgsNDYgQEAg ZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFibGUnLCBbCiAgICAgICAgICAgICAgIG1zZyA9IHVuZGVm aW5lZCwKICAgICAgICAgICAgICAgbmFtZSA9IHRoaXMuZ2V0KCduYW1lJyksCiAgICAgICAgICAg ICAgIHNjaGVtYSA9IHRoaXMuZ2V0KCdzY2hlbWEnKSwKLSAgICAgICAgICAgICAgcmVsb3duZXIg PSB0aGlzLmdldCgncmVsb3duZXInKTsKLQotICAgICAgICAgIC8vIElmIG5vdGhpbmcgdG8gdmFs aWRhdGUgb3IgVmFjdXVtU2V0dGluZyBrZXlzIHRoZW4KLSAgICAgICAgICAvLyByZXR1cm4gZnJv bSBoZXJlCi0gICAgICAgICAgaWYgKCBrZXlzICYmIChrZXlzLmxlbmd0aCA9PSAwCi0gICAgICAg ICAgICAgICAgICAgICAgICB8fCBfLmluZGV4T2Yoa2V5cywgJ2F1dG92YWN1dW1fZW5hYmxlZCcp ICE9IC0xCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBfLmluZGV4T2Yoa2V5cywgJ3RvYXN0 X2F1dG92YWN1dW1fZW5hYmxlZCcpICE9IC0xKSApIHsKLSAgICAgICAgICAgIHJldHVybiBudWxs OwotICAgICAgICAgIH0KKyAgICAgICAgICAgICAgcmVsb3duZXIgPSB0aGlzLmdldCgncmVsb3du ZXInKSwKKyAgICAgICAgICAgICAgaXNfcGFydGl0aW9uZWQgPSB0aGlzLmdldCgnaXNfcGFydGl0 aW9uZWQnKSwKKyAgICAgICAgICAgICAgcGFydGl0aW9uX2tleXMgPSB0aGlzLmdldCgncGFydGl0 aW9uX2tleXMnKTsKIAotICAgICAgICAgIC8vIEhhdmUgdG8gY2xlYXIgZXhpc3RpbmcgdmFsaWRh dGlvbiBiZWZvcmUgaW5pdGlhdGluZyBjdXJyZW50IHN0YXRlIHZhbGlkYXRpb24gb25seQotICAg ICAgICAgIHRoaXMuZXJyb3JNb2RlbC5jbGVhcigpOwotCi0gICAgICAgICAgaWYgKF8uaXNVbmRl ZmluZWQobmFtZSkgfHwgXy5pc051bGwobmFtZSkgfHwKLSAgICAgICAgICAgIFN0cmluZyhuYW1l KS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpID09ICcnKSB7CisgICAgICAgICAgaWYgKAorICAg ICAgICAgICAgXy5pc1VuZGVmaW5lZChuYW1lKSB8fCBfLmlzTnVsbChuYW1lKSB8fAorICAgICAg ICAgICAgU3RyaW5nKG5hbWUpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykgPT0gJycKKyAgICAg ICAgICApIHsKICAgICAgICAgICAgIG1zZyA9IGdldHRleHQoJ1RhYmxlIG5hbWUgY2Fubm90IGJl IGVtcHR5LicpOwogICAgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgnbmFtZScsIG1zZyk7 CiAgICAgICAgICAgICByZXR1cm4gbXNnOwotICAgICAgICAgIH0gZWxzZSBpZiAoXy5pc1VuZGVm aW5lZChzY2hlbWEpIHx8IF8uaXNOdWxsKHNjaGVtYSkgfHwKLSAgICAgICAgICAgIFN0cmluZyhz Y2hlbWEpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykgPT0gJycpIHsKKyAgICAgICAgICB9Cisg ICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnVuc2V0KCduYW1lJyk7CisgICAgICAgICAgaWYgKAor ICAgICAgICAgICAgXy5pc1VuZGVmaW5lZChzY2hlbWEpIHx8IF8uaXNOdWxsKHNjaGVtYSkgfHwK KyAgICAgICAgICAgIFN0cmluZyhzY2hlbWEpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykgPT0g JycKKyAgICAgICAgICApIHsKICAgICAgICAgICAgIG1zZyA9IGdldHRleHQoJ1RhYmxlIHNjaGVt YSBjYW5ub3QgYmUgZW1wdHkuJyk7CiAgICAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCdz Y2hlbWEnLCBtc2cpOwogICAgICAgICAgICAgcmV0dXJuIG1zZzsKLSAgICAgICAgICB9IGVsc2Ug aWYgKF8uaXNVbmRlZmluZWQocmVsb3duZXIpIHx8IF8uaXNOdWxsKHJlbG93bmVyKSB8fAotICAg ICAgICAgICAgU3RyaW5nKHJlbG93bmVyKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpID09ICcn KSB7CisgICAgICAgICAgfQorICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC51bnNldCgnc2NoZW1h Jyk7CisgICAgICAgICAgaWYgKAorICAgICAgICAgICAgXy5pc1VuZGVmaW5lZChyZWxvd25lcikg fHwgXy5pc051bGwocmVsb3duZXIpIHx8CisgICAgICAgICAgICBTdHJpbmcocmVsb3duZXIpLnJl cGxhY2UoL15ccyt8XHMrJC9nLCAnJykgPT0gJycKKyAgICAgICAgICApIHsKICAgICAgICAgICAg IG1zZyA9IGdldHRleHQoJ1RhYmxlIG93bmVyIGNhbm5vdCBiZSBlbXB0eS4nKTsKICAgICAgICAg ICAgIHRoaXMuZXJyb3JNb2RlbC5zZXQoJ3JlbG93bmVyJywgbXNnKTsKICAgICAgICAgICAgIHJl dHVybiBtc2c7CiAgICAgICAgICAgfQorICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC51bnNldCgn cmVsb3duZXInKTsKKyAgICAgICAgICBpZiAoCisgICAgICAgICAgICBpc19wYXJ0aXRpb25lZCAm JiB0aGlzLmlzTmV3KCkgJiYKKyAgICAgICAgICAgICFfLmlzTnVsbChwYXJ0aXRpb25fa2V5cykg JiYgcGFydGl0aW9uX2tleXMubGVuZ3RoIDw9IDAKKyAgICAgICAgICApIHsKKyAgICAgICAgICAg IG1zZyA9IGdldHRleHQoJ1BsZWFzZSBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBrZXkgZm9yIHBhcnRp dGlvbmVkIHRhYmxlLicpOworICAgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgncGFydGl0 aW9uX2tleXMnLCBtc2cpOworICAgICAgICAgICAgcmV0dXJuIG1zZzsKKyAgICAgICAgICB9Cisg ICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnVuc2V0KCdwYXJ0aXRpb25fa2V5cycpOwogICAgICAg ICAgIHJldHVybiBudWxsOwogICAgICAgICB9LAogICAgICAgICAvLyBXZSB3aWxsIGRpc2FibGUg ZXZlcnl0aGluZyBpZiB3ZSBhcmUgdW5kZXIgY2F0YWxvZyBub2RlCkBAIC03OTcsNyArMTExNSwx NSBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS50YWJsZScsIFsKICAgICAgICAgfSwKICAgICAgICAg Ly8gT2Z0eXBlIGlzIGRlZmluZWQ/CiAgICAgICAgIGNoZWNrSW5oZXJpdGFuY2U6IGZ1bmN0aW9u KG0pIHsKLSAgICAgICAgIC8vIGNvbGxfaW5oZXJpdHMgfHwgdHlwbmFtZQorICAgICAgICAgIC8v IERpc2FibGVkIGlmIGl0IGlzIHBhcnRpdGlvbmVkIHRhYmxlCisgICAgICAgICAgaWYgKG0uZ2V0 KCdpc19wYXJ0aXRpb25lZCcpKSB7CisgICAgICAgICAgICBzZXRUaW1lb3V0KCBmdW5jdGlvbigp IHsKKyAgICAgICAgICAgICAgIG0uc2V0KCdjb2xsX2luaGVyaXRzJywgW10pOworICAgICAgICAg ICAgfSwgMTApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgfQorCisgICAg ICAgICAgLy8gY29sbF9pbmhlcml0cyB8fCB0eXBuYW1lCiAgICAgICAgICAgaWYoIW0uaW5TY2hl bWEuYXBwbHkodGhpcywgW21dKSAmJgogICAgICAgICAgICAgICAoIF8uaXNVbmRlZmluZWQobS5n ZXQoJ3R5cG5hbWUnKSkgfHwKICAgICAgICAgICAgICAgICBfLmlzTnVsbChtLmdldCgndHlwbmFt ZScpKSB8fApAQCAtODQxLDcgKzExNjcsMTUgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFibGUn LCBbCiAgICAgICAgIH0sCiAgICAgICAgIC8vIFdlIHdpbGwgZGlzYWJsZSBpdCBpZiBJbmhlcml0 YW5jZSBpcyBkZWZpbmVkCiAgICAgICAgIGNoZWNrT2ZUeXBlOiBmdW5jdGlvbihtKSB7Ci0gICAg ICAgIC8vY29sbF9pbmhlcml0cyB8fCB0eXBuYW1lCisgICAgICAgICAgLy8gRGlzYWJsZWQgaWYg aXQgaXMgcGFydGl0aW9uZWQgdGFibGUKKyAgICAgICAgICBpZiAobS5nZXQoJ2lzX3BhcnRpdGlv bmVkJykpIHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgeworICAgICAgICAg ICAgICAgbS5zZXQoJ3R5cG5hbWUnLCB1bmRlZmluZWQpOworICAgICAgICAgICAgfSwgMTApOwor ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgfQorCisgICAgICAgICAgLy9jb2xs X2luaGVyaXRzIHx8IHR5cG5hbWUKICAgICAgICAgICBpZighbS5pblNjaGVtYVdpdGhNb2RlbENo ZWNrLmFwcGx5KHRoaXMsIFttXSkgJiYKICAgICAgICAgICAgICAgKF8uaXNVbmRlZmluZWQobS5n ZXQoJ2NvbGxfaW5oZXJpdHMnKSkgfHwKICAgICAgICAgICAgICAgIF8uaXNOdWxsKG0uZ2V0KCdj b2xsX2luaGVyaXRzJykpIHx8CkBAIC05NjcsNiArMTMwMSwxMTYgQEAgZGVmaW5lKCdwZ2FkbWlu Lm5vZGUudGFibGUnLCBbCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgfQog ICAgICAgICB9CisgICAgICB9LAorICAgICAgb25UYWJsZVVwZGF0ZWQ6IGZ1bmN0aW9uKF9ub2Rl LCBfb2xkTm9kZURhdGEsIF9uZXdOb2RlRGF0YSkgeworICAgICAgICBpZiAoCisgICAgICAgICAg X25ld05vZGVEYXRhLmlzX3BhcnRpdGlvbmVkICYmICdhZmZlY3RlZF9wYXJ0aXRpb25zJyBpbiBf bmV3Tm9kZURhdGEKKyAgICAgICAgKSB7CisgICAgICAgICAgdmFyIHBhcnRpdGlvbnMgPSBfbmV3 Tm9kZURhdGEuYWZmZWN0ZWRfcGFydGl0aW9ucywKKyAgICAgICAgICAgICAgaWR4LCBub2RlX2lu Zm8sIHNlbGYgPSB0aGlzLAorICAgICAgICAgICAgICBuZXdQYXJ0aXRpb25zSURzID0gW10sCisg ICAgICAgICAgICAgIGluc2VydENoaWxkVHJlZU5vZGVzID0gW10sCisgICAgICAgICAgICAgIGlu c2VydENoaWxkcmVuTm9kZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlu c2VydENoaWxkVHJlZU5vZGVzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg ICAgICAgICAgICAgICB2YXIgb3B0aW9uID0gaW5zZXJ0Q2hpbGRUcmVlTm9kZXMucG9wKCk7Cisg ICAgICAgICAgICAgICAgcGdCcm93c2VyLmFkZENoaWxkVHJlZU5vZGVzKAorICAgICAgICAgICAg ICAgICAgb3B0aW9uLnRyZWVIaWVyYXJjaHksIG9wdGlvbi5wYXJlbnQsIG9wdGlvbi50eXBlLAor ICAgICAgICAgICAgICAgICAgb3B0aW9uLmNoaWxkcmVuSURzLCBpbnNlcnRDaGlsZHJlbk5vZGVz CisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgfTsKKworICAgICAgICAgIGlmICgn ZGV0YWNoZWQnIGluIHBhcnRpdGlvbnMgJiYgcGFydGl0aW9ucy5kZXRhY2hlZC5sZW5ndGggPiAw KSB7CisgICAgICAgICAgICAvLyBSZW1vdmUgaXQgZnJvbSB0aGUgcGFydGl0aW9uIGNvbGxlY3Rp b25zIG5vZGUgZmlyc3QKKyAgICAgICAgICAgIHBnQnJvd3Nlci5yZW1vdmVDaGlsZFRyZWVOb2Rl c0J5SWQoCisgICAgICAgICAgICAgIF9ub2RlLCAnY29sbC1wYXJ0aXRpb24nLCBfLm1hcCgKKyAg ICAgICAgICAgICAgICBwYXJ0aXRpb25zLmRldGFjaGVkLCBmdW5jdGlvbihfZCkgeyByZXR1cm4g cGFyc2VJbnQoX2Qub2lkKTsgfQorICAgICAgICAgICAgICApCisgICAgICAgICAgICApOworCisg ICAgICAgICAgICB2YXIgc2NoZW1hTm9kZSA9IHBnQnJvd3Nlci5maW5kUGFyZW50VHJlZU5vZGVC eVR5cGUoCisgICAgICAgICAgICAgICAgICBfbm9kZSwgJ3NjaGVtYScKKyAgICAgICAgICAgICAg ICApLAorICAgICAgICAgICAgICAgIGRldGFjaGVkQnlTY2hlbWEgPSBfLmdyb3VwQnkoCisgICAg ICAgICAgICAgICAgICBwYXJ0aXRpb25zLmRldGFjaGVkLAorICAgICAgICAgICAgICAgICAgZnVu Y3Rpb24oX2QpIHsgcmV0dXJuIHBhcnNlSW50KF9kLnNjaGVtYV9pZCk7IH0KKyAgICAgICAgICAg ICAgICApLCBjaGlsZElEczsKKworICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGRldGFjaGVk QnlTY2hlbWEpIHsKKyAgICAgICAgICAgICAgc2NoZW1hTm9kZSA9IHBnQnJvd3Nlci5maW5kU2li bGluZ1RyZWVOb2RlKHNjaGVtYU5vZGUsIGtleSk7CisKKyAgICAgICAgICAgICAgaWYgKHNjaGVt YU5vZGUpIHsKKyAgICAgICAgICAgICAgICBjaGlsZElEcyA9IF8ubWFwKAorICAgICAgICAgICAg ICAgICAgZGV0YWNoZWRCeVNjaGVtYVtrZXldLAorICAgICAgICAgICAgICAgICAgZnVuY3Rpb24o X2QpIHsgcmV0dXJuIHBhcnNlSW50KF9kLm9pZCk7IH0KKyAgICAgICAgICAgICAgICApOworCisg ICAgICAgICAgICAgICAgdmFyIHRhYmxlc0NvbGxOb2RlID0gcGdCcm93c2VyLmZpbmRDaGlsZENv bGxlY3Rpb25UcmVlTm9kZSgKKyAgICAgICAgICAgICAgICAgIHNjaGVtYU5vZGUsICdjb2xsLXRh YmxlJworICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgICAgICBpZiAodGFibGVzQ29s bE5vZGUpIHsKKyAgICAgICAgICAgICAgICAgIGluc2VydENoaWxkVHJlZU5vZGVzLnB1c2goewor ICAgICAgICAgICAgICAgICAgICAncGFyZW50JzogdGFibGVzQ29sbE5vZGUsCisgICAgICAgICAg ICAgICAgICAgICd0eXBlJzogJ3RhYmxlJywKKyAgICAgICAgICAgICAgICAgICAgJ3RyZWVIaWVy YXJjaHknOiBwZ0FkbWluLkJyb3dzZXIuTm9kZXMuc2NoZW1hLmdldFRyZWVOb2RlSGllcmFyY2h5 KHNjaGVtYU5vZGUpLAorICAgICAgICAgICAgICAgICAgICAnY2hpbGRyZW5JRHMnOiBfLmNsb25l KGNoaWxkSURzKQorICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYg KCdhdHRhY2hlZCcgaW4gcGFydGl0aW9ucyAmJiBwYXJ0aXRpb25zLmF0dGFjaGVkLmxlbmd0aCA+ IDApIHsKKyAgICAgICAgICAgIHZhciBzY2hlbWFOb2RlID0gcGdCcm93c2VyLmZpbmRQYXJlbnRU cmVlTm9kZUJ5VHlwZSgKKyAgICAgICAgICAgICAgICAgIF9ub2RlLCAnc2NoZW1hJworICAgICAg ICAgICAgICAgICksCisgICAgICAgICAgICAgICAgYXR0YWNoZWRCeVNjaGVtYSA9IF8uZ3JvdXBC eSgKKyAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbnMuYXR0YWNoZWQsCisgICAgICAgICAgICAg ICAgICBmdW5jdGlvbihfZCkgeyByZXR1cm4gcGFyc2VJbnQoX2Quc2NoZW1hX2lkKTsgfQorICAg ICAgICAgICAgICAgICksIGNoaWxkSURzOworCisgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4g YXR0YWNoZWRCeVNjaGVtYSkgeworICAgICAgICAgICAgICBzY2hlbWFOb2RlID0gcGdCcm93c2Vy LmZpbmRTaWJsaW5nVHJlZU5vZGUoc2NoZW1hTm9kZSwga2V5KTsKKworICAgICAgICAgICAgICBp ZiAoc2NoZW1hTm9kZSkgeworICAgICAgICAgICAgICAgIGNoaWxkSURzID0gXy5tYXAoCisgICAg ICAgICAgICAgICAgICBhdHRhY2hlZEJ5U2NoZW1hW2tleV0sCisgICAgICAgICAgICAgICAgICBm dW5jdGlvbihfZCkgeyByZXR1cm4gcGFyc2VJbnQoX2Qub2lkKTsgfQorICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGl0IGZyb20gdGhlIHRhYmxlIGNvbGxlY3Rp b25zIG5vZGUgZmlyc3QKKyAgICAgICAgICAgICAgICBwZ0Jyb3dzZXIucmVtb3ZlQ2hpbGRUcmVl Tm9kZXNCeUlkKAorICAgICAgICAgICAgICAgICAgc2NoZW1hTm9kZSwgJ2NvbGwtdGFibGUnLCBj aGlsZElEcworICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgbmV3UGFydGl0aW9uc0lEcyA9IG5ld1BhcnRpdGlvbnNJRHMuY29uY2F0KGNoaWxkSURzKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoJ2NyZWF0ZWQnIGlu IHBhcnRpdGlvbnMgJiYgcGFydGl0aW9ucy5jcmVhdGVkLmxlbmd0aCA+IDApIHsKKyAgICAgICAg ICAgIF8uZWFjaChwYXJ0aXRpb25zLmNyZWF0ZWQsIGZ1bmN0aW9uKF9kYXRhKSB7CisgICAgICAg ICAgICAgIG5ld1BhcnRpdGlvbnNJRHMucHVzaChfZGF0YS5vaWQpOworICAgICAgICAgICAgfSk7 CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKG5ld1BhcnRpdGlvbnNJRHMubGVuZ3RoKSB7 CisgICAgICAgICAgICBub2RlX2luZm8gPSBzZWxmLmdldFRyZWVOb2RlSGllcmFyY2h5KF9ub2Rl KTsKKworICAgICAgICAgICAgdmFyIHBhcnRpdGlvbnNDb2xsTm9kZSA9IHBnQnJvd3Nlci5maW5k Q2hpbGRDb2xsZWN0aW9uVHJlZU5vZGUoCisgICAgICAgICAgICAgIF9ub2RlLCAnY29sbC1wYXJ0 aXRpb24nCisgICAgICAgICAgICApOworCisgICAgICAgICAgICBpZiAocGFydGl0aW9uc0NvbGxO b2RlKSB7CisgICAgICAgICAgICAgIGluc2VydENoaWxkVHJlZU5vZGVzLnB1c2goeworICAgICAg ICAgICAgICAgICdwYXJlbnQnOiBwYXJ0aXRpb25zQ29sbE5vZGUsCisgICAgICAgICAgICAgICAg J3R5cGUnOiAncGFydGl0aW9uJywKKyAgICAgICAgICAgICAgICAndHJlZUhpZXJhcmNoeSc6IHNl bGYuZ2V0VHJlZU5vZGVIaWVyYXJjaHkoX25vZGUpLAorICAgICAgICAgICAgICAgICdjaGlsZHJl bklEcyc6IG5ld1BhcnRpdGlvbnNJRHMKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgfQorICAgICAgICAgIGluc2VydENoaWxkcmVuTm9kZXMoKTsKKyAgICAgICAg fQogICAgICAgfQogICAgIH0pOwogICB9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVz L3BhcnRpdGlvbi9zcWwvMTBfcGx1cy9hdHRhY2guc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9z ZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9w YXJ0aXRpb24vc3FsLzEwX3BsdXMvYXR0YWNoLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi4wNjYxZDljCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRl cy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMvYXR0YWNoLnNxbApAQCAtMCwwICsxLDIgQEAKK0FMVEVS IFRBQkxFIHt7Y29ubnxxdElkZW50KGRhdGEucGFyZW50X3NjaGVtYSwgZGF0YS5wYXJ0aXRpb25l ZF90YWJsZV9uYW1lKX19IEFUVEFDSCBQQVJUSVRJT04ge3tjb25ufHF0SWRlbnQoZGF0YS5zY2hl bWEsIGRhdGEubmFtZSl9fQorICAgIHt7IGRhdGEucGFydGl0aW9uX3ZhbHVlIH19OwpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2Vz L3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMvYmFja2VuZF9z dXBwb3J0LnNxbCBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvcGFydGl0aW9uL3NxbC8xMF9wbHVzL2Jh Y2tlbmRfc3VwcG9ydC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZh MWQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvcGFydGl0aW9uL3Nx bC8xMF9wbHVzL2JhY2tlbmRfc3VwcG9ydC5zcWwKQEAgLTAsMCArMSw5IEBACit7Iz09PT09PT09 PT09PT1DaGVja3MgaWYgaXQgaXMgcGFydGl0aW9uZWQgdGFibGU9PT09PT09PSN9Cit7JSBpZiB0 aWQgJX0KK1NFTEVDVAorICAgIENBU0UgV0hFTiBjLnJlbGtpbmQgPSAncCcgVEhFTiBUcnVlIEVM U0UgRmFsc2UgRU5EIEFzIHB0YWJsZQorRlJPTQorICAgIHBnX2NsYXNzIGMKK1dIRVJFCisgICAg Yy5vaWQgPSB7eyB0aWQgfX06Om9pZAoreyUgZW5kaWYgJX0KZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxl cy90ZW1wbGF0ZXMvcGFydGl0aW9uL3NxbC8xMF9wbHVzL2NyZWF0ZS5zcWwgYi93ZWIvcGdhZG1p bi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMv dGVtcGxhdGVzL3BhcnRpdGlvbi9zcWwvMTBfcGx1cy9jcmVhdGUuc3FsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZTk0MDQKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdh ZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJs ZXMvdGVtcGxhdGVzL3BhcnRpdGlvbi9zcWwvMTBfcGx1cy9jcmVhdGUuc3FsCkBAIC0wLDAgKzEs MzAgQEAKK3slIGltcG9ydCAndGFibGUvc3FsL21hY3Jvcy9jb25zdHJhaW50cy5tYWNybycgYXMg Q09OU1RSQUlOVFMgJX0KK3sjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PSN9Cit7Iz09PT09PSBNQUlOIFRBQkxFIFRFTVBMQVRFIFNUQVJUUyBIRVJFID09PT09PSN9 Cit7Iz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0jfQoreyMjIyBD UkVBVEUgVEFCTEUgU1RBVEVNRU5UIEZPUiBwYXJ0aXRpb25zICMjI30KK0NSRUFURSB7JSBpZiBk YXRhLnJlbHBlcnNpc3RlbmNlICV9VU5MT0dHRUQgeyUgZW5kaWYgJX1UQUJMRSB7e2Nvbm58cXRJ ZGVudChkYXRhLnNjaGVtYSwgZGF0YS5uYW1lKX19eyUgaWYgZGF0YS5yZWxpc3BhcnRpdGlvbiBp cyBkZWZpbmVkIGFuZCBkYXRhLnJlbGlzcGFydGl0aW9uICV9IFBBUlRJVElPTiBPRiB7e2Nvbm58 cXRJZGVudChkYXRhLnBhcmVudF9zY2hlbWEsIGRhdGEucGFydGl0aW9uZWRfdGFibGVfbmFtZSl9 fXslIGVuZGlmICV9CisKK3sjIE1hY3JvIHRvIHJlbmRlciBmb3IgY29uc3RyYWludHMgI30KK3sl IGlmIGRhdGEucHJpbWFyeV9rZXl8bGVuZ3RoID4gMCBvciBkYXRhLnVuaXF1ZV9jb25zdHJhaW50 fGxlbmd0aCA+IDAgb3IgZGF0YS5mb3JlaWduX2tleXxsZW5ndGggPiAwIG9yIGRhdGEuY2hlY2tf Y29uc3RyYWludHxsZW5ndGggPiAwIG9yIGRhdGEuZXhjbHVkZV9jb25zdHJhaW50fGxlbmd0aCA+ IDAgJX0KKyggeyUgZW5kaWYgJX0KK3slIGlmIGRhdGEucHJpbWFyeV9rZXl8bGVuZ3RoID4gMCAl fXt7Q09OU1RSQUlOVFMuUFJJTUFSWV9LRVkoY29ubiwgZGF0YS5wcmltYXJ5X2tleVswXSl9fXsl IGVuZGlmICV9eyUgaWYgZGF0YS51bmlxdWVfY29uc3RyYWludHxsZW5ndGggPiAwICV9eyUgaWYg ZGF0YS5wcmltYXJ5X2tleXxsZW5ndGggPiAwICV9LHslIGVuZGlmICV9Cit7e0NPTlNUUkFJTlRT LlVOSVFVRShjb25uLCBkYXRhLnVuaXF1ZV9jb25zdHJhaW50KX19eyUgZW5kaWYgJX17JSBpZiBk YXRhLmZvcmVpZ25fa2V5fGxlbmd0aCA+IDAgJX17JSBpZiBkYXRhLnByaW1hcnlfa2V5fGxlbmd0 aCA+IDAgb3IgZGF0YS51bmlxdWVfY29uc3RyYWludHxsZW5ndGggPiAwICV9LHslIGVuZGlmICV9 Cit7e0NPTlNUUkFJTlRTLkZPUkVJR05fS0VZKGNvbm4sIGRhdGEuZm9yZWlnbl9rZXkpfX17JSBl bmRpZiAlfXslIGlmIGRhdGEuY2hlY2tfY29uc3RyYWludHxsZW5ndGggPiAwICV9eyUgaWYgZGF0 YS5wcmltYXJ5X2tleXxsZW5ndGggPiAwIG9yIGRhdGEudW5pcXVlX2NvbnN0cmFpbnR8bGVuZ3Ro ID4gMCBvciBkYXRhLmZvcmVpZ25fa2V5fGxlbmd0aCA+IDAgJX0seyUgZW5kaWYgJX0KK3t7Q09O U1RSQUlOVFMuQ0hFQ0soY29ubiwgZGF0YS5jaGVja19jb25zdHJhaW50KX19eyUgZW5kaWYgJX17 JSBpZiBkYXRhLmV4Y2x1ZGVfY29uc3RyYWludHxsZW5ndGggPiAwICV9eyUgaWYgZGF0YS5wcmlt YXJ5X2tleXxsZW5ndGggPiAwIG9yIGRhdGEudW5pcXVlX2NvbnN0cmFpbnR8bGVuZ3RoID4gMCBv ciBkYXRhLmZvcmVpZ25fa2V5fGxlbmd0aCA+IDAgb3IgZGF0YS5jaGVja19jb25zdHJhaW50fGxl bmd0aCA+IDAgJX0seyUgZW5kaWYgJX0KK3t7Q09OU1RSQUlOVFMuRVhDTFVERShjb25uLCBkYXRh LmV4Y2x1ZGVfY29uc3RyYWludCl9fXslIGVuZGlmICV9Cit7JSBpZiBkYXRhLnByaW1hcnlfa2V5 fGxlbmd0aCA+IDAgb3IgZGF0YS51bmlxdWVfY29uc3RyYWludHxsZW5ndGggPiAwIG9yIGRhdGEu Zm9yZWlnbl9rZXl8bGVuZ3RoID4gMCBvciBkYXRhLmNoZWNrX2NvbnN0cmFpbnR8bGVuZ3RoID4g MCBvciBkYXRhLmV4Y2x1ZGVfY29uc3RyYWludHxsZW5ndGggPiAwICV9CisKKykKK3slIGVuZGlm ICV9CisgICAge3sgZGF0YS5wYXJ0aXRpb25fdmFsdWUgfX17JSBpZiBkYXRhLmlzX3BhcnRpdGlv bmVkIGlzIGRlZmluZWQgYW5kIGRhdGEuaXNfcGFydGl0aW9uZWQgJX0KKworICAgIFBBUlRJVElP TiBCWSB7eyBkYXRhLnBhcnRpdGlvbl9zY2hlbWUgfX17JSBlbmRpZiAlfTsKKworCit7IyMjIEFs dGVyIFNRTCBmb3IgT3duZXIgIyMjfQoreyUgaWYgZGF0YS5yZWxvd25lciAlfQorCitBTFRFUiBU QUJMRSB7e2Nvbm58cXRJZGVudChkYXRhLnNjaGVtYSwgZGF0YS5uYW1lKX19CisgICAgT1dORVIg dG8ge3tjb25ufHF0SWRlbnQoZGF0YS5yZWxvd25lcil9fTsKK3slIGVuZGlmICV9CmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv c2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3BhcnRpdGlvbi9zcWwvMTBfcGx1cy9kZXRhY2guc3Fs IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMvZGV0YWNoLnNxbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjQxM2RiCi0tLSAvZGV2L251bGwK KysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2Vz L3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMvZGV0YWNoLnNx bApAQCAtMCwwICsxIEBACitBTFRFUiBUQUJMRSB7e2Nvbm58cXRJZGVudChkYXRhLnBhcmVudF9z Y2hlbWEsIGRhdGEucGFydGl0aW9uZWRfdGFibGVfbmFtZSl9fSBERVRBQ0ggUEFSVElUSU9OIHt7 Y29ubnxxdElkZW50KGRhdGEuc2NoZW1hLCBkYXRhLm5hbWUpfX07CmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90 YWJsZXMvdGVtcGxhdGVzL3BhcnRpdGlvbi9zcWwvMTBfcGx1cy9nZXRfYXR0YWNoX3RhYmxlcy5z cWwgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv c2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3BhcnRpdGlvbi9zcWwvMTBfcGx1cy9nZXRfYXR0YWNo X3RhYmxlcy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc2ZGMzZgot LS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2 ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvcGFydGl0aW9uL3NxbC8xMF9w bHVzL2dldF9hdHRhY2hfdGFibGVzLnNxbApAQCAtMCwwICsxLDIzIEBACitTRUxFQ1Qgb2lkLCBx dW90ZV9pZGVudChuc3BuYW1lKXx8Jy4nfHxxdW90ZV9pZGVudChyZWxuYW1lKSBBUyB0YWJsZV9u YW1lIEZST00KKyhTRUxFQ1QKKwlyLm9pZCwgci5yZWxuYW1lLCBuLm5zcG5hbWUsIGFycmF5X2Fn ZyhhLmF0dG5hbWUpIGF0dG5hbWVzLCBhcnJheV9hZ2coYS5hdHR0eXBpZCkgYXR0dHlwZXMKK0ZS T00KKwkoU0VMRUNUIG9pZCwgcmVsbmFtZSwgcmVsbmFtZXNwYWNlIEZST00gcGdfY2F0YWxvZy5w Z19jbGFzcworCSAgV0hFUkUgcmVsa2luZCBpbiAoJ3InLCAncCcpIEFORCBOT1QgcmVsaXNwYXJ0 aXRpb24pIHIKKyAgICBKT0lOIChTRUxFQ1Qgb2lkIEFTIG5zcG9pZCwgbnNwbmFtZSBGUk9NCisg ICAgICAgICAgcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgV0hFUkUgbnNwbmFtZSBOT1QgTElLRSBF J3BnXF8lJykgbgorICAgICAgICAgIE9OIChyLnJlbG5hbWVzcGFjZSA9IG4ubnNwb2lkKQorICAg IEpPSU4gKFNFTEVDVCBhdHRyZWxpZCwgYXR0bmFtZSwgYXR0dHlwaWQgRlJPTQorICAgICAgICAg IHBnX2NhdGFsb2cucGdfYXR0cmlidXRlIFdIRVJFIGF0dG51bSA+IDAgT1JERVIgQlkgYXR0cmVs aWQsIGF0dG51bSkgYQorICAgICAgICAgIE9OIChyLm9pZCA9IGEuYXR0cmVsaWQpCitHUk9VUCBC WSByLm9pZCwgci5yZWxuYW1lLCByLnJlbG5hbWVzcGFjZSwgbi5uc3BuYW1lKSBhbGxfdGFibGVz CitKT0lOCisoU0VMRUNUCisJYXR0cmVsaWQsIGFycmF5X2FnZyhhdHRuYW1lKSBhdHRuYW1lcywg YXJyYXlfYWdnKGF0dHR5cGlkKSBhdHR0eXBlcworRlJPTQorCShTRUxFQ1QgKiBGUk9NIHBnX2Nh dGFsb2cucGdfYXR0cmlidXRlCisJICBXSEVSRSBhdHRyZWxpZCA9IHt7IHRpZCB9fSBBTkQgYXR0 bnVtID4gMAorCSAgT1JERVIgQlkgYXR0cmVsaWQsIGF0dG51bSkgYXR0cmlidXRlcworR1JPVVAg QlkgYXR0cmVsaWQpIGN1cnJlbnRfdGFibGUgT04gY3VycmVudF90YWJsZS5hdHRyZWxpZCAhPSBh bGxfdGFibGVzLm9pZAorICBBTkQgY3VycmVudF90YWJsZS5hdHRuYW1lcyA9IGFsbF90YWJsZXMu YXR0bmFtZXMKKyAgQU5EIGN1cnJlbnRfdGFibGUuYXR0dHlwZXMgPSBhbGxfdGFibGVzLmF0dHR5 cGVzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rl bXBsYXRlcy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMvbm9kZXMuc3FsIGIvd2ViL3BnYWRtaW4vYnJv d3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBs YXRlcy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMvbm9kZXMuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmJkODI4Y2QKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVt cGxhdGVzL3BhcnRpdGlvbi9zcWwvMTBfcGx1cy9ub2Rlcy5zcWwKQEAgLTAsMCArMSwxNSBAQAor U0VMRUNUIHJlbC5vaWQsIHJlbC5yZWxuYW1lIEFTIG5hbWUsCisgICAgKFNFTEVDVCBjb3VudCgq KSBGUk9NIHBnX3RyaWdnZXIgV0hFUkUgdGdyZWxpZD1yZWwub2lkIEFORCB0Z2lzaW50ZXJuYWwg PSBGQUxTRSkgQVMgdHJpZ2dlcmNvdW50LAorICAgIChTRUxFQ1QgY291bnQoKikgRlJPTSBwZ190 cmlnZ2VyIFdIRVJFIHRncmVsaWQ9cmVsLm9pZCBBTkQgdGdpc2ludGVybmFsID0gRkFMU0UgQU5E IHRnZW5hYmxlZCA9ICdPJykgQVMgaGFzX2VuYWJsZV90cmlnZ2VycywKKyAgICBwZ19nZXRfZXhw cihyZWwucmVscGFydGJvdW5kLCByZWwub2lkKSBBUyBwYXJ0aXRpb25fdmFsdWUsCisgICAgcmVs LnJlbG5hbWVzcGFjZSBBUyBzY2hlbWFfaWQsCisgICAgbnNwLm5zcG5hbWUgQVMgc2NoZW1hX25h bWUsCisgICAgKENBU0UgV0hFTiByZWwucmVsa2luZCA9ICdwJyBUSEVOIHRydWUgRUxTRSBmYWxz ZSBFTkQpIEFTIGlzX3BhcnRpdGlvbmVkLAorICAgIChDQVNFIFdIRU4gcmVsLnJlbGtpbmQgPSAn cCcgVEhFTiBwZ19nZXRfcGFydGtleWRlZihyZWwub2lkOjpvaWQpIEVMU0UgJycgRU5EKSBBUyBw YXJ0aXRpb25fc2NoZW1lCitGUk9NCisgICAgKFNFTEVDVCAqIEZST00gcGdfaW5oZXJpdHMgV0hF UkUgaW5ocGFyZW50ID0ge3sgdGlkIH19OjpvaWQpIGluaAorICAgIExFRlQgSk9JTiBwZ19jbGFz cyByZWwgT04gaW5oLmluaHJlbGlkID0gcmVsLm9pZAorICAgIExFRlQgSk9JTiBwZ19uYW1lc3Bh Y2UgbnNwIE9OIHJlbC5yZWxuYW1lc3BhY2UgPSBuc3Aub2lkCisgICAgV0hFUkUgcmVsLnJlbGlz cGFydGl0aW9uCisgICAgeyUgaWYgcHRpZCAlfSBBTkQgcmVsLm9pZCA9IHt7IHB0aWQgfX06Ok9J RCB7JSBlbmRpZiAlfQorICAgIE9SREVSIEJZIHJlbC5yZWxuYW1lOwpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMv dGFibGVzL3RlbXBsYXRlcy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMvcHJvcGVydGllcy5zcWwgYi93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvdGVtcGxhdGVzL3BhcnRpdGlvbi9zcWwvMTBfcGx1cy9wcm9wZXJ0aWVzLnNxbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWY0NDc2Ci0tLSAvZGV2L251bGwK KysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2Vz L3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMvcHJvcGVydGll cy5zcWwKQEAgLTAsMCArMSw4MiBAQAorU0VMRUNUIHJlbC5vaWQsIHJlbC5yZWxuYW1lIEFTIG5h bWUsIHJlbC5yZWx0YWJsZXNwYWNlIEFTIHNwY29pZCxyZWwucmVsYWNsIEFTIHJlbGFjbF9zdHIs CisgIChDQVNFIFdIRU4gbGVuZ3RoKHNwYy5zcGNuYW1lKSA+IDAgVEhFTiBzcGMuc3BjbmFtZSBF TFNFCisgICAgKFNFTEVDVCBzcC5zcGNuYW1lIEZST00gcGdfZGF0YWJhc2UgZHRiCisgICAgSk9J TiBwZ190YWJsZXNwYWNlIHNwIE9OIGR0Yi5kYXR0YWJsZXNwYWNlPXNwLm9pZAorICAgIFdIRVJF IGR0Yi5vaWQgPSB7eyBkaWQgfX06Om9pZCkKKyAgRU5EKSBhcyBzcGNuYW1lLAorICAoc2VsZWN0 IG5zcG5hbWUgRlJPTSBwZ19uYW1lc3BhY2UgV0hFUkUgb2lkID0ge3tzY2lkfX06Om9pZCApIGFz IHBhcmVudF9zY2hlbWEsCisgIG5zcC5uc3BuYW1lIGFzIHNjaGVtYSwKKyAgcGdfZ2V0X3VzZXJi eWlkKHJlbC5yZWxvd25lcikgQVMgcmVsb3duZXIsIHJlbC5yZWxoYXNvaWRzLCByZWwucmVsaXNw YXJ0aXRpb24sCisgIHJlbC5yZWxoYXNzdWJjbGFzcywgcmVsLnJlbHR1cGxlcywgZGVzLmRlc2Ny aXB0aW9uLCBjb24uY29ubmFtZSwgY29uLmNvbmtleSwKKwlFWElTVFMoc2VsZWN0IDEgRlJPTSBw Z190cmlnZ2VyCisJCQlKT0lOIHBnX3Byb2MgcHQgT04gcHQub2lkPXRnZm9pZCBBTkQgcHQucHJv bmFtZT0nbG9ndHJpZ2dlcicKKwkJCUpPSU4gcGdfcHJvYyBwYyBPTiBwYy5wcm9uYW1lc3BhY2U9 cHQucHJvbmFtZXNwYWNlIEFORCBwYy5wcm9uYW1lPSdzbG9ueXZlcnNpb24nCisJCQlXSEVSRSB0 Z3JlbGlkPXJlbC5vaWQpIEFTIGlzcmVwbCwKKwkoU0VMRUNUIGNvdW50KCopIEZST00gcGdfdHJp Z2dlciBXSEVSRSB0Z3JlbGlkPXJlbC5vaWQgQU5EIHRnaXNpbnRlcm5hbCA9IEZBTFNFKSBBUyB0 cmlnZ2VyY291bnQsCisJKFNFTEVDVCBBUlJBWShTRUxFQ1QgQ0FTRSBXSEVOIChuc3BuYW1lIE5P VCBMSUtFIEUncGdcXyUnKSBUSEVOCisgICAgICAgICAgICBxdW90ZV9pZGVudChuc3BuYW1lKXx8 Jy4nfHxxdW90ZV9pZGVudChjLnJlbG5hbWUpCisgICAgICAgICAgICBFTFNFIHF1b3RlX2lkZW50 KGMucmVsbmFtZSkgRU5EIEFTIGluaGVyaXRlZF90YWJsZXMKKyAgICBGUk9NIHBnX2luaGVyaXRz IGkKKyAgICBKT0lOIHBnX2NsYXNzIGMgT04gYy5vaWQgPSBpLmluaHBhcmVudAorICAgIEpPSU4g cGdfbmFtZXNwYWNlIG4gT04gbi5vaWQ9Yy5yZWxuYW1lc3BhY2UKKyAgICBXSEVSRSBpLmluaHJl bGlkID0gcmVsLm9pZCBPUkRFUiBCWSBpbmhzZXFubykpIEFTIGNvbGxfaW5oZXJpdHMsCisgIChT RUxFQ1QgY291bnQoKikKKwkJRlJPTSBwZ19pbmhlcml0cyBpCisgICAgICBKT0lOIHBnX2NsYXNz IGMgT04gYy5vaWQgPSBpLmluaHBhcmVudAorICAgICAgSk9JTiBwZ19uYW1lc3BhY2UgbiBPTiBu Lm9pZD1jLnJlbG5hbWVzcGFjZQorCQlXSEVSRSBpLmluaHJlbGlkID0gcmVsLm9pZCkgQVMgaW5o ZXJpdGVkX3RhYmxlc19jbnQsCisJKENBU0UgV0hFTiByZWwucmVscGVyc2lzdGVuY2UgPSAndScg VEhFTiB0cnVlIEVMU0UgZmFsc2UgRU5EKSBBUyByZWxwZXJzaXN0ZW5jZSwKKwlzdWJzdHJpbmco YXJyYXlfdG9fc3RyaW5nKHJlbC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2ZpbGxmYWN0b3I9KFsw LTldKiknKSBBUyBmaWxsZmFjdG9yLAorCShDQVNFIFdIRU4gKHN1YnN0cmluZyhhcnJheV90b19z dHJpbmcocmVsLnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV9lbmFibGVkPShbYS16 fDAtOV0qKScpID0gJ3RydWUnKQorCSAgVEhFTiB0cnVlIEVMU0UgZmFsc2UgRU5EKSBBUyBhdXRv dmFjdXVtX2VuYWJsZWQsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhyZWwucmVsb3B0aW9u cywgJywnKSBGUk9NICdhdXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQ9KFswLTldKiknKSBBUyBh dXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhy ZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX3ZhY3V1bV9zY2FsZV9mYWN0b3I9 KFswLTldKlsuXVswLTldKiknKSBBUyBhdXRvdmFjdXVtX3ZhY3V1bV9zY2FsZV9mYWN0b3IsCisJ c3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhyZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRv dmFjdXVtX2FuYWx5emVfdGhyZXNob2xkPShbMC05XSopJykgQVMgYXV0b3ZhY3V1bV9hbmFseXpl X3RocmVzaG9sZCwKKwlzdWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHJlbC5yZWxvcHRpb25zLCAn LCcpIEZST00gJ2F1dG92YWN1dW1fYW5hbHl6ZV9zY2FsZV9mYWN0b3I9KFswLTldKlsuXVswLTld KiknKSBBUyBhdXRvdmFjdXVtX2FuYWx5emVfc2NhbGVfZmFjdG9yLAorCXN1YnN0cmluZyhhcnJh eV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1f Y29zdF9kZWxheT0oWzAtOV0qKScpIEFTIGF1dG92YWN1dW1fdmFjdXVtX2Nvc3RfZGVsYXksCisJ c3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhyZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRv dmFjdXVtX3ZhY3V1bV9jb3N0X2xpbWl0PShbMC05XSopJykgQVMgYXV0b3ZhY3V1bV92YWN1dW1f Y29zdF9saW1pdCwKKwlzdWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHJlbC5yZWxvcHRpb25zLCAn LCcpIEZST00gJ2F1dG92YWN1dW1fZnJlZXplX21pbl9hZ2U9KFswLTldKiknKSBBUyBhdXRvdmFj dXVtX2ZyZWV6ZV9taW5fYWdlLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9w dGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV9mcmVlemVfbWF4X2FnZT0oWzAtOV0qKScpIEFT IGF1dG92YWN1dW1fZnJlZXplX21heF9hZ2UsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhy ZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2ZyZWV6ZV90YWJsZV9hZ2U9KFsw LTldKiknKSBBUyBhdXRvdmFjdXVtX2ZyZWV6ZV90YWJsZV9hZ2UsCisJKENBU0UgV0hFTiAoc3Vi c3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3QucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFj dXVtX2VuYWJsZWQ9KFthLXp8MC05XSopJykgPSAgJ3RydWUnKQorCSAgVEhFTiB0cnVlIEVMU0Ug ZmFsc2UgRU5EKSBBUyB0b2FzdF9hdXRvdmFjdXVtX2VuYWJsZWQsCisJc3Vic3RyaW5nKGFycmF5 X3RvX3N0cmluZyh0c3QucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX3ZhY3V1bV90 aHJlc2hvbGQ9KFswLTldKiknKSBBUyB0b2FzdF9hdXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQs CisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3QucmVsb3B0aW9ucywgJywnKSBGUk9NICdh dXRvdmFjdXVtX3ZhY3V1bV9zY2FsZV9mYWN0b3I9KFswLTldKlsuXVswLTldKiknKSBBUyB0b2Fz dF9hdXRvdmFjdXVtX3ZhY3V1bV9zY2FsZV9mYWN0b3IsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0 cmluZyh0c3QucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2FuYWx5emVfdGhyZXNo b2xkPShbMC05XSopJykgQVMgdG9hc3RfYXV0b3ZhY3V1bV9hbmFseXplX3RocmVzaG9sZCwKKwlz dWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHRzdC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92 YWN1dW1fYW5hbHl6ZV9zY2FsZV9mYWN0b3I9KFswLTldKlsuXVswLTldKiknKSBBUyB0b2FzdF9h dXRvdmFjdXVtX2FuYWx5emVfc2NhbGVfZmFjdG9yLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJp bmcodHN0LnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9kZWxh eT0oWzAtOV0qKScpIEFTIHRvYXN0X2F1dG92YWN1dW1fdmFjdXVtX2Nvc3RfZGVsYXksCisJc3Vi c3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3QucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFj dXVtX3ZhY3V1bV9jb3N0X2xpbWl0PShbMC05XSopJykgQVMgdG9hc3RfYXV0b3ZhY3V1bV92YWN1 dW1fY29zdF9saW1pdCwKKwlzdWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHRzdC5yZWxvcHRpb25z LCAnLCcpIEZST00gJ2F1dG92YWN1dW1fZnJlZXplX21pbl9hZ2U9KFswLTldKiknKSBBUyB0b2Fz dF9hdXRvdmFjdXVtX2ZyZWV6ZV9taW5fYWdlLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmco dHN0LnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV9mcmVlemVfbWF4X2FnZT0oWzAt OV0qKScpIEFTIHRvYXN0X2F1dG92YWN1dW1fZnJlZXplX21heF9hZ2UsCisJc3Vic3RyaW5nKGFy cmF5X3RvX3N0cmluZyh0c3QucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2ZyZWV6 ZV90YWJsZV9hZ2U9KFswLTldKiknKSBBUyB0b2FzdF9hdXRvdmFjdXVtX2ZyZWV6ZV90YWJsZV9h Z2UsCisJYXJyYXlfdG9fc3RyaW5nKHJlbC5yZWxvcHRpb25zLCAnLCcpIEFTIHRhYmxlX3ZhY3V1 bV9zZXR0aW5nc19zdHIsCisJYXJyYXlfdG9fc3RyaW5nKHRzdC5yZWxvcHRpb25zLCAnLCcpIEFT IHRvYXN0X3RhYmxlX3ZhY3V1bV9zZXR0aW5nc19zdHIsCisJcmVsLnJlbG9wdGlvbnMgQVMgcmVs b3B0aW9ucywgdHN0LnJlbG9wdGlvbnMgQVMgdG9hc3RfcmVsb3B0aW9ucywgcmVsLnJlbG9mdHlw ZSwgdHlwLnR5cG5hbWUsCisJKENBU0UgV0hFTiByZWwucmVsdG9hc3RyZWxpZCA9IDAgVEhFTiBm YWxzZSBFTFNFIHRydWUgRU5EKSBBUyBoYXN0b2FzdHRhYmxlLAorICAgIC0tIEFkZGVkIGZvciBw Z0FkbWluNAorCShDQVNFIFdIRU4gKHN1YnN0cmluZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9w dGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV9lbmFibGVkPShbYS16fDAtOV0qKScpKTo6Ym9v bGVhbiAgVEhFTiB0cnVlIEVMU0UgZmFsc2UgRU5EKSBBUyBhdXRvdmFjdXVtX2N1c3RvbSwKKwko Q0FTRSBXSEVOIChzdWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHRzdC5yZWxvcHRpb25zLCAnLCcp IEZST00gJ2F1dG92YWN1dW1fZW5hYmxlZD0oW2EtenwwLTldKiknKSk6OmJvb2xlYW4gIEFORCBy ZWwucmVsdG9hc3RyZWxpZCAhPSAwIFRIRU4gdHJ1ZSBFTFNFIGZhbHNlIEVORCkgQVMgdG9hc3Rf YXV0b3ZhY3V1bSwKKworCShTRUxFQ1QgYXJyYXlfYWdnKHByb3ZpZGVyIHx8ICc9JyB8fCBsYWJl bCkgRlJPTSBwZ19zZWNsYWJlbHMgc2wxIFdIRVJFIHNsMS5vYmpvaWQ9cmVsLm9pZCBBTkQgc2wx Lm9ianN1YmlkPTApIEFTIHNlY2xhYmVscywKKwkoQ0FTRSBXSEVOIHJlbC5vaWQgPD0ge3sgZGF0 bGFzdHN5c29pZH19OjpvaWQgVEhFTiB0cnVlIEVsU0UgZmFsc2UgRU5EKSBBUyBpc19zeXNfdGFi bGUsCisJLS0gQWRkZWQgZm9yIHBhcnRpdGlvbiB0YWJsZQorCShDQVNFIFdIRU4gcmVsLnJlbGtp bmQgPSAncCcgVEhFTiB0cnVlIEVMU0UgZmFsc2UgRU5EKSBBUyBpc19wYXJ0aXRpb25lZCwKKwko Q0FTRSBXSEVOIHJlbC5yZWxraW5kID0gJ3AnIFRIRU4gcGdfZ2V0X3BhcnRrZXlkZWYocmVsLm9p ZDo6b2lkKSBFTFNFICcnIEVORCkgQVMgcGFydGl0aW9uX3NjaGVtZSwKKwl7JSBpZiBwdGlkICV9 CisJICAoQ0FTRSBXSEVOIHJlbC5yZWxpc3BhcnRpdGlvbiBUSEVOIHBnX2dldF9leHByKHJlbC5y ZWxwYXJ0Ym91bmQsIHt7IHB0aWQgfX06Om9pZCkgRUxTRSAnJyBFTkQpIEFTIHBhcnRpdGlvbl92 YWx1ZSwKKwkgIChTRUxFQ1QgcmVsbmFtZSBGUk9NIHBnX2NsYXNzIFdIRVJFIG9pZCA9IHt7IHRp ZCB9fTo6b2lkKSBBUyBwYXJ0aXRpb25lZF90YWJsZV9uYW1lCisJeyUgZWxzZSAlfQorCSAgcGdf Z2V0X2V4cHIocmVsLnJlbHBhcnRib3VuZCwgcmVsLm9pZCkgQVMgcGFydGl0aW9uX3ZhbHVlCisJ eyUgZW5kaWYgJX0KKworRlJPTSBwZ19jbGFzcyByZWwKKyAgTEVGVCBPVVRFUiBKT0lOIHBnX3Rh Ymxlc3BhY2Ugc3BjIG9uIHNwYy5vaWQ9cmVsLnJlbHRhYmxlc3BhY2UKKyAgTEVGVCBPVVRFUiBK T0lOIHBnX2Rlc2NyaXB0aW9uIGRlcyBPTiAoZGVzLm9iam9pZD1yZWwub2lkIEFORCBkZXMub2Jq c3ViaWQ9MCBBTkQgZGVzLmNsYXNzb2lkPSdwZ19jbGFzcyc6OnJlZ2NsYXNzKQorICBMRUZUIE9V VEVSIEpPSU4gcGdfY29uc3RyYWludCBjb24gT04gY29uLmNvbnJlbGlkPXJlbC5vaWQgQU5EIGNv bi5jb250eXBlPSdwJworICBMRUZUIE9VVEVSIEpPSU4gcGdfY2xhc3MgdHN0IE9OIHRzdC5vaWQg PSByZWwucmVsdG9hc3RyZWxpZAorICBMRUZUIEpPSU4gcGdfdHlwZSB0eXAgT04gcmVsLnJlbG9m dHlwZT10eXAub2lkCisgIExFRlQgSk9JTiBwZ19pbmhlcml0cyBpbmggT04gaW5oLmluaHJlbGlk ID0gcmVsLm9pZAorICBMRUZUIEpPSU4gcGdfbmFtZXNwYWNlIG5zcCBPTiByZWwucmVsbmFtZXNw YWNlID0gbnNwLm9pZAorV0hFUkUgcmVsLnJlbGlzcGFydGl0aW9uIEFORCBpbmguaW5ocGFyZW50 ID0ge3sgdGlkIH19OjpvaWQKK3slIGlmIHB0aWQgJX0gIEFORCByZWwub2lkID0ge3sgcHRpZCB9 fTo6b2lkIHslIGVuZGlmICV9CitPUkRFUiBCWSByZWwucmVsbmFtZTsKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsLzEwX3BsdXMvYWNsLnNxbCBiL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90 ZW1wbGF0ZXMvdGFibGUvc3FsLzEwX3BsdXMvYWNsLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5lYWRmOWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJv d3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBs YXRlcy90YWJsZS9zcWwvMTBfcGx1cy9hY2wuc3FsCkBAIC0wLDAgKzEsNDYgQEAKK3sjIyMgU1FM IHRvIGZldGNoIHByaXZpbGVnZXMgZm9yIHRhYmxlc3BhY2UgIyMjfQorU0VMRUNUICdyZWxhY2wn IGFzIGRlZnR5cGUsIENPQUxFU0NFKGd0LnJvbG5hbWUsICdQVUJMSUMnKSBncmFudGVlLCBnLnJv bG5hbWUgZ3JhbnRvciwKKyAgICBhcnJheV9hZ2cocHJpdmlsZWdlX3R5cGUpIGFzIHByaXZpbGVn ZXMsIGFycmF5X2FnZyhpc19ncmFudGFibGUpIGFzIGdyYW50YWJsZQorRlJPTQorICAoU0VMRUNU CisgICAgZC5ncmFudGVlLCBkLmdyYW50b3IsIGQuaXNfZ3JhbnRhYmxlLAorICAgIENBU0UgZC5w cml2aWxlZ2VfdHlwZQorCQlXSEVOICdDT05ORUNUJyBUSEVOICdjJworCQlXSEVOICdDUkVBVEUn IFRIRU4gJ0MnCisJCVdIRU4gJ0RFTEVURScgVEhFTiAnZCcKKwkJV0hFTiAnRVhFQ1VURScgVEhF TiAnWCcKKwkJV0hFTiAnSU5TRVJUJyBUSEVOICdhJworCQlXSEVOICdSRUZFUkVOQ0VTJyBUSEVO ICd4JworCQlXSEVOICdTRUxFQ1QnIFRIRU4gJ3InCisJCVdIRU4gJ1RFTVBPUkFSWScgVEhFTiAn VCcKKwkJV0hFTiAnVFJJR0dFUicgVEhFTiAndCcKKwkJV0hFTiAnVFJVTkNBVEUnIFRIRU4gJ0Qn CisJCVdIRU4gJ1VQREFURScgVEhFTiAndycKKwkJV0hFTiAnVVNBR0UnIFRIRU4gJ1UnCisJCUVM U0UgJ1VOS05PV04nCisJRU5EIEFTIHByaXZpbGVnZV90eXBlCisgIEZST00KKyAgICAoU0VMRUNU IHJlbC5yZWxhY2wKKyAgICAgICAgRlJPTSBwZ19jbGFzcyByZWwKKyAgICAgICAgICBMRUZUIE9V VEVSIEpPSU4gcGdfdGFibGVzcGFjZSBzcGMgb24gc3BjLm9pZD1yZWwucmVsdGFibGVzcGFjZQor ICAgICAgICAgIExFRlQgT1VURVIgSk9JTiBwZ19jb25zdHJhaW50IGNvbiBPTiBjb24uY29ucmVs aWQ9cmVsLm9pZCBBTkQgY29uLmNvbnR5cGU9J3AnCisgICAgICAgICAgTEVGVCBPVVRFUiBKT0lO IHBnX2NsYXNzIHRzdCBPTiB0c3Qub2lkID0gcmVsLnJlbHRvYXN0cmVsaWQKKyAgICAgICAgICBM RUZUIEpPSU4gcGdfdHlwZSB0eXAgT04gcmVsLnJlbG9mdHlwZT10eXAub2lkCisgICAgICAgIFdI RVJFIHJlbC5yZWxraW5kIElOICgncicsJ3MnLCd0JywncCcpIEFORCByZWwucmVsbmFtZXNwYWNl ID0ge3sgc2NpZCB9fTo6b2lkCisgICAgICAgICAgICBBTkQgcmVsLm9pZCA9IHt7IHRpZCB9fTo6 b2lkCisgICAgKSBhY2wsCisgICAgKFNFTEVDVCAoZCkuZ3JhbnRlZSBBUyBncmFudGVlLCAoZCku Z3JhbnRvciBBUyBncmFudG9yLCAoZCkuaXNfZ3JhbnRhYmxlCisgICAgICAgIEFTIGlzX2dyYW50 YWJsZSwgKGQpLnByaXZpbGVnZV90eXBlIEFTIHByaXZpbGVnZV90eXBlIEZST00gKFNFTEVDVAor ICAgICAgICBhY2xleHBsb2RlKHJlbC5yZWxhY2wpIGFzIGQKKyAgICAgICAgRlJPTSBwZ19jbGFz cyByZWwKKyAgICAgICAgICBMRUZUIE9VVEVSIEpPSU4gcGdfdGFibGVzcGFjZSBzcGMgb24gc3Bj Lm9pZD1yZWwucmVsdGFibGVzcGFjZQorICAgICAgICAgIExFRlQgT1VURVIgSk9JTiBwZ19jb25z dHJhaW50IGNvbiBPTiBjb24uY29ucmVsaWQ9cmVsLm9pZCBBTkQgY29uLmNvbnR5cGU9J3AnCisg ICAgICAgICAgTEVGVCBPVVRFUiBKT0lOIHBnX2NsYXNzIHRzdCBPTiB0c3Qub2lkID0gcmVsLnJl bHRvYXN0cmVsaWQKKyAgICAgICAgICBMRUZUIEpPSU4gcGdfdHlwZSB0eXAgT04gcmVsLnJlbG9m dHlwZT10eXAub2lkCisgICAgICAgIFdIRVJFIHJlbC5yZWxraW5kIElOICgncicsJ3MnLCd0Jywn cCcpIEFORCByZWwucmVsbmFtZXNwYWNlID0ge3sgc2NpZCB9fTo6b2lkCisgICAgICAgICAgICBB TkQgcmVsLm9pZCA9IHt7IHRpZCB9fTo6b2lkCisgICAgICAgICkgYSkgZAorICAgICkgZAorICBM RUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19yb2xlcyBnIE9OIChkLmdyYW50b3IgPSBnLm9pZCkKKyAg TEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfcm9sZXMgZ3QgT04gKGQuZ3JhbnRlZSA9IGd0Lm9pZCkK K0dST1VQIEJZIGcucm9sbmFtZSwgZ3Qucm9sbmFtZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rl bXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9nZXRfaW5oZXJpdHMuc3FsIGIvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rl bXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9nZXRfaW5oZXJpdHMuc3FsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOGYyOTgKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdh ZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJs ZXMvdGVtcGxhdGVzL3RhYmxlL3NxbC8xMF9wbHVzL2dldF9pbmhlcml0cy5zcWwKQEAgLTAsMCAr MSwxNyBAQAoreyUgaW1wb3J0ICd0YWJsZS9zcWwvbWFjcm9zL2RiX2NhdGFsb2dzLm1hY3JvJyBh cyBDQVRBTE9HICV9CitTRUxFQ1QgYy5vaWQsIGMucmVsbmFtZSAsIG5zcG5hbWUsCitDQVNFIFdI RU4gbnNwbmFtZSBOT1QgTElLRSBFJ3BnXF8lJyBUSEVOCisgcXVvdGVfaWRlbnQobnNwbmFtZSl8 fCcuJ3x8cXVvdGVfaWRlbnQoYy5yZWxuYW1lKQorRUxTRSBxdW90ZV9pZGVudChjLnJlbG5hbWUp CitFTkQgQVMgaW5oZXJpdHMKK0ZST00gcGdfY2xhc3MgYworSk9JTiBwZ19uYW1lc3BhY2Ugbgor T04gbi5vaWQ9Yy5yZWxuYW1lc3BhY2UKK1dIRVJFIHJlbGtpbmQ9J3InIEFORCBOT1QgcmVsaXNw YXJ0aXRpb24KK3slIGlmIG5vdCBzaG93X3N5c3RlbV9vYmplY3RzICV9Cit7eyBDQVRBTE9HLlZB TElEX0NBVEFMT0dTKHNlcnZlcl90eXBlKSB9fQoreyUgZW5kaWYgJX0KK3slIGlmIHRpZCAlfQor QU5EIGMub2lkICE9IHRpZAoreyUgZW5kaWYgJX0KK09SREVSIEJZIHJlbG5hbWVzcGFjZSwgYy5y ZWxuYW1lClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVz L3RlbXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9nZXRfb2lkLnNxbCBiL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1w bGF0ZXMvdGFibGUvc3FsLzEwX3BsdXMvZ2V0X29pZC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uZjYzMDY5OAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1w bGF0ZXMvdGFibGUvc3FsLzEwX3BsdXMvZ2V0X29pZC5zcWwKQEAgLTAsMCArMSw1IEBACitTRUxF Q1QgcmVsLm9pZCBhcyB0aWQKK0ZST00gcGdfY2xhc3MgcmVsCitXSEVSRSByZWwucmVsa2luZCBJ TiAoJ3InLCdzJywndCcsJ3AnKQorQU5EIHJlbC5yZWxuYW1lc3BhY2UgPSB7eyBzY2lkIH19Ojpv aWQKK0FORCByZWwucmVsbmFtZSA9IHt7ZGF0YS5uYW1lfHF0TGl0ZXJhbH19ClwgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9z cWwvMTBfcGx1cy9nZXRfdGFibGUuc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3Jv dXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwv MTBfcGx1cy9nZXRfdGFibGUuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjY5NTJjOGQKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3RhYmxlL3Nx bC8xMF9wbHVzL2dldF90YWJsZS5zcWwKQEAgLTAsMCArMSw4IEBACitTRUxFQ1QKKyAgICByZWwu cmVsbmFtZSBBUyBuYW1lCitGUk9NCisgICAgcGdfY2xhc3MgcmVsCitXSEVSRQorICAgIHJlbC5y ZWxraW5kIElOICgncicsJ3MnLCd0JywncCcpCisgICAgQU5EIHJlbC5yZWxuYW1lc3BhY2UgPSB7 eyBzY2lkIH19OjpvaWQKKyAgICBBTkQgcmVsLm9pZCA9IHt7IHRpZCB9fTo6b2lkOwpcIE5vIG5l d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2Vy dmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvdGFi bGUvc3FsLzEwX3BsdXMvbm9kZXMuc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3Jv dXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwv MTBfcGx1cy9ub2Rlcy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJm OWM0MgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsLzEw X3BsdXMvbm9kZXMuc3FsCkBAIC0wLDAgKzEsOSBAQAorU0VMRUNUIHJlbC5vaWQsIHJlbC5yZWxu YW1lIEFTIG5hbWUsCisgICAgKFNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3RyaWdnZXIgV0hFUkUg dGdyZWxpZD1yZWwub2lkIEFORCB0Z2lzaW50ZXJuYWwgPSBGQUxTRSkgQVMgdHJpZ2dlcmNvdW50 LAorICAgIChTRUxFQ1QgY291bnQoKikgRlJPTSBwZ190cmlnZ2VyIFdIRVJFIHRncmVsaWQ9cmVs Lm9pZCBBTkQgdGdpc2ludGVybmFsID0gRkFMU0UgQU5EIHRnZW5hYmxlZCA9ICdPJykgQVMgaGFz X2VuYWJsZV90cmlnZ2VycywKKyAgICAoQ0FTRSBXSEVOIHJlbC5yZWxraW5kID0gJ3AnIFRIRU4g dHJ1ZSBFTFNFIGZhbHNlIEVORCkgQVMgaXNfcGFydGl0aW9uZWQKK0ZST00gcGdfY2xhc3MgcmVs CisgICAgV0hFUkUgcmVsLnJlbGtpbmQgSU4gKCdyJywncycsJ3QnLCdwJykgQU5EIHJlbC5yZWxu YW1lc3BhY2UgPSB7eyBzY2lkIH19OjpvaWQKKyAgICBBTkQgTk9UIHJlbC5yZWxpc3BhcnRpdGlv bgorICAgIHslIGlmIHRpZCAlfSBBTkQgcmVsLm9pZCA9IHt7dGlkfX06Ok9JRCB7JSBlbmRpZiAl fQorICAgIE9SREVSIEJZIHJlbC5yZWxuYW1lOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJv d3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBs YXRlcy90YWJsZS9zcWwvMTBfcGx1cy9wcm9wZXJ0aWVzLnNxbCBiL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0 ZXMvdGFibGUvc3FsLzEwX3BsdXMvcHJvcGVydGllcy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMWQ1ODlkZgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1w bGF0ZXMvdGFibGUvc3FsLzEwX3BsdXMvcHJvcGVydGllcy5zcWwKQEAgLTAsMCArMSw3MyBAQAor U0VMRUNUIHJlbC5vaWQsIHJlbC5yZWxuYW1lIEFTIG5hbWUsIHJlbC5yZWx0YWJsZXNwYWNlIEFT IHNwY29pZCxyZWwucmVsYWNsIEFTIHJlbGFjbF9zdHIsCisgIChDQVNFIFdIRU4gbGVuZ3RoKHNw Yy5zcGNuYW1lKSA+IDAgVEhFTiBzcGMuc3BjbmFtZSBFTFNFCisgICAgKFNFTEVDVCBzcC5zcGNu YW1lIEZST00gcGdfZGF0YWJhc2UgZHRiCisgICAgSk9JTiBwZ190YWJsZXNwYWNlIHNwIE9OIGR0 Yi5kYXR0YWJsZXNwYWNlPXNwLm9pZAorICAgIFdIRVJFIGR0Yi5vaWQgPSB7eyBkaWQgfX06Om9p ZCkKKyAgRU5EKSBhcyBzcGNuYW1lLAorICAoc2VsZWN0IG5zcG5hbWUgRlJPTSBwZ19uYW1lc3Bh Y2UgV0hFUkUgb2lkID0ge3tzY2lkfX06Om9pZCApIGFzIHNjaGVtYSwKKyAgcGdfZ2V0X3VzZXJi eWlkKHJlbC5yZWxvd25lcikgQVMgcmVsb3duZXIsIHJlbC5yZWxoYXNvaWRzLCByZWwucmVsa2lu ZCwKKyAgKENBU0UgV0hFTiByZWwucmVsa2luZCA9ICdwJyBUSEVOIHRydWUgRUxTRSBmYWxzZSBF TkQpIEFTIGlzX3BhcnRpdGlvbmVkLAorICByZWwucmVsaGFzc3ViY2xhc3MsIHJlbC5yZWx0dXBs ZXMsIGRlcy5kZXNjcmlwdGlvbiwgY29uLmNvbm5hbWUsIGNvbi5jb25rZXksCisJRVhJU1RTKHNl bGVjdCAxIEZST00gcGdfdHJpZ2dlcgorCQkJSk9JTiBwZ19wcm9jIHB0IE9OIHB0Lm9pZD10Z2Zv aWQgQU5EIHB0LnByb25hbWU9J2xvZ3RyaWdnZXInCisJCQlKT0lOIHBnX3Byb2MgcGMgT04gcGMu cHJvbmFtZXNwYWNlPXB0LnByb25hbWVzcGFjZSBBTkQgcGMucHJvbmFtZT0nc2xvbnl2ZXJzaW9u JworCQkJV0hFUkUgdGdyZWxpZD1yZWwub2lkKSBBUyBpc3JlcGwsCisJKFNFTEVDVCBjb3VudCgq KSBGUk9NIHBnX3RyaWdnZXIgV0hFUkUgdGdyZWxpZD1yZWwub2lkIEFORCB0Z2lzaW50ZXJuYWwg PSBGQUxTRSkgQVMgdHJpZ2dlcmNvdW50LAorCShTRUxFQ1QgQVJSQVkoU0VMRUNUIENBU0UgV0hF TiAobnNwbmFtZSBOT1QgTElLRSBFJ3BnXF8lJykgVEhFTgorICAgICAgICAgICAgcXVvdGVfaWRl bnQobnNwbmFtZSl8fCcuJ3x8cXVvdGVfaWRlbnQoYy5yZWxuYW1lKQorICAgICAgICAgICAgRUxT RSBxdW90ZV9pZGVudChjLnJlbG5hbWUpIEVORCBBUyBpbmhlcml0ZWRfdGFibGVzCisgICAgRlJP TSBwZ19pbmhlcml0cyBpCisgICAgSk9JTiBwZ19jbGFzcyBjIE9OIGMub2lkID0gaS5pbmhwYXJl bnQKKyAgICBKT0lOIHBnX25hbWVzcGFjZSBuIE9OIG4ub2lkPWMucmVsbmFtZXNwYWNlCisgICAg V0hFUkUgaS5pbmhyZWxpZCA9IHJlbC5vaWQgT1JERVIgQlkgaW5oc2Vxbm8pKSBBUyBjb2xsX2lu aGVyaXRzLAorICAoU0VMRUNUIGNvdW50KCopCisJCUZST00gcGdfaW5oZXJpdHMgaQorICAgICAg Sk9JTiBwZ19jbGFzcyBjIE9OIGMub2lkID0gaS5pbmhwYXJlbnQKKyAgICAgIEpPSU4gcGdfbmFt ZXNwYWNlIG4gT04gbi5vaWQ9Yy5yZWxuYW1lc3BhY2UKKwkJV0hFUkUgaS5pbmhyZWxpZCA9IHJl bC5vaWQpIEFTIGluaGVyaXRlZF90YWJsZXNfY250LAorCShDQVNFIFdIRU4gcmVsLnJlbHBlcnNp c3RlbmNlID0gJ3UnIFRIRU4gdHJ1ZSBFTFNFIGZhbHNlIEVORCkgQVMgcmVscGVyc2lzdGVuY2Us CisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhyZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdm aWxsZmFjdG9yPShbMC05XSopJykgQVMgZmlsbGZhY3RvciwKKwkoQ0FTRSBXSEVOIChzdWJzdHJp bmcoYXJyYXlfdG9fc3RyaW5nKHJlbC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1f ZW5hYmxlZD0oW2EtenwwLTldKiknKSA9ICd0cnVlJykKKwkgIFRIRU4gdHJ1ZSBFTFNFIGZhbHNl IEVORCkgQVMgYXV0b3ZhY3V1bV9lbmFibGVkLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmco cmVsLnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1fdGhyZXNob2xkPShb MC05XSopJykgQVMgYXV0b3ZhY3V1bV92YWN1dW1fdGhyZXNob2xkLAorCXN1YnN0cmluZyhhcnJh eV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1f c2NhbGVfZmFjdG9yPShbMC05XSpbLl1bMC05XSopJykgQVMgYXV0b3ZhY3V1bV92YWN1dW1fc2Nh bGVfZmFjdG9yLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcs JykgRlJPTSAnYXV0b3ZhY3V1bV9hbmFseXplX3RocmVzaG9sZD0oWzAtOV0qKScpIEFTIGF1dG92 YWN1dW1fYW5hbHl6ZV90aHJlc2hvbGQsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhyZWwu cmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2FuYWx5emVfc2NhbGVfZmFjdG9yPShb MC05XSpbLl1bMC05XSopJykgQVMgYXV0b3ZhY3V1bV9hbmFseXplX3NjYWxlX2ZhY3RvciwKKwlz dWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHJlbC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92 YWN1dW1fdmFjdXVtX2Nvc3RfZGVsYXk9KFswLTldKiknKSBBUyBhdXRvdmFjdXVtX3ZhY3V1bV9j b3N0X2RlbGF5LAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcs JykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9saW1pdD0oWzAtOV0qKScpIEFTIGF1dG92 YWN1dW1fdmFjdXVtX2Nvc3RfbGltaXQsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhyZWwu cmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2ZyZWV6ZV9taW5fYWdlPShbMC05XSop JykgQVMgYXV0b3ZhY3V1bV9mcmVlemVfbWluX2FnZSwKKwlzdWJzdHJpbmcoYXJyYXlfdG9fc3Ry aW5nKHJlbC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fZnJlZXplX21heF9hZ2U9 KFswLTldKiknKSBBUyBhdXRvdmFjdXVtX2ZyZWV6ZV9tYXhfYWdlLAorCXN1YnN0cmluZyhhcnJh eV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV9mcmVlemVf dGFibGVfYWdlPShbMC05XSopJykgQVMgYXV0b3ZhY3V1bV9mcmVlemVfdGFibGVfYWdlLAorCShD QVNFIFdIRU4gKHN1YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlvbnMsICcsJykg RlJPTSAnYXV0b3ZhY3V1bV9lbmFibGVkPShbYS16fDAtOV0qKScpID0gICd0cnVlJykKKwkgIFRI RU4gdHJ1ZSBFTFNFIGZhbHNlIEVORCkgQVMgdG9hc3RfYXV0b3ZhY3V1bV9lbmFibGVkLAorCXN1 YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3Zh Y3V1bV92YWN1dW1fdGhyZXNob2xkPShbMC05XSopJykgQVMgdG9hc3RfYXV0b3ZhY3V1bV92YWN1 dW1fdGhyZXNob2xkLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlvbnMs ICcsJykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1fc2NhbGVfZmFjdG9yPShbMC05XSpbLl1bMC05 XSopJykgQVMgdG9hc3RfYXV0b3ZhY3V1bV92YWN1dW1fc2NhbGVfZmFjdG9yLAorCXN1YnN0cmlu ZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV9h bmFseXplX3RocmVzaG9sZD0oWzAtOV0qKScpIEFTIHRvYXN0X2F1dG92YWN1dW1fYW5hbHl6ZV90 aHJlc2hvbGQsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3QucmVsb3B0aW9ucywgJywn KSBGUk9NICdhdXRvdmFjdXVtX2FuYWx5emVfc2NhbGVfZmFjdG9yPShbMC05XSpbLl1bMC05XSop JykgQVMgdG9hc3RfYXV0b3ZhY3V1bV9hbmFseXplX3NjYWxlX2ZhY3RvciwKKwlzdWJzdHJpbmco YXJyYXlfdG9fc3RyaW5nKHRzdC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fdmFj dXVtX2Nvc3RfZGVsYXk9KFswLTldKiknKSBBUyB0b2FzdF9hdXRvdmFjdXVtX3ZhY3V1bV9jb3N0 X2RlbGF5LAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlvbnMsICcsJykg RlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9saW1pdD0oWzAtOV0qKScpIEFTIHRvYXN0X2F1 dG92YWN1dW1fdmFjdXVtX2Nvc3RfbGltaXQsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0 c3QucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2ZyZWV6ZV9taW5fYWdlPShbMC05 XSopJykgQVMgdG9hc3RfYXV0b3ZhY3V1bV9mcmVlemVfbWluX2FnZSwKKwlzdWJzdHJpbmcoYXJy YXlfdG9fc3RyaW5nKHRzdC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fZnJlZXpl X21heF9hZ2U9KFswLTldKiknKSBBUyB0b2FzdF9hdXRvdmFjdXVtX2ZyZWV6ZV9tYXhfYWdlLAor CXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0 b3ZhY3V1bV9mcmVlemVfdGFibGVfYWdlPShbMC05XSopJykgQVMgdG9hc3RfYXV0b3ZhY3V1bV9m cmVlemVfdGFibGVfYWdlLAorCWFycmF5X3RvX3N0cmluZyhyZWwucmVsb3B0aW9ucywgJywnKSBB UyB0YWJsZV92YWN1dW1fc2V0dGluZ3Nfc3RyLAorCWFycmF5X3RvX3N0cmluZyh0c3QucmVsb3B0 aW9ucywgJywnKSBBUyB0b2FzdF90YWJsZV92YWN1dW1fc2V0dGluZ3Nfc3RyLAorCXJlbC5yZWxv cHRpb25zIEFTIHJlbG9wdGlvbnMsIHRzdC5yZWxvcHRpb25zIEFTIHRvYXN0X3JlbG9wdGlvbnMs IHJlbC5yZWxvZnR5cGUsIHR5cC50eXBuYW1lLAorCShDQVNFIFdIRU4gcmVsLnJlbHRvYXN0cmVs aWQgPSAwIFRIRU4gZmFsc2UgRUxTRSB0cnVlIEVORCkgQVMgaGFzdG9hc3R0YWJsZSwKKyAgICAt LSBBZGRlZCBmb3IgcGdBZG1pbjQKKwkoQ0FTRSBXSEVOIChzdWJzdHJpbmcoYXJyYXlfdG9fc3Ry aW5nKHJlbC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fZW5hYmxlZD0oW2Etenww LTldKiknKSk6OmJvb2xlYW4gIFRIRU4gdHJ1ZSBFTFNFIGZhbHNlIEVORCkgQVMgYXV0b3ZhY3V1 bV9jdXN0b20sCisJKENBU0UgV0hFTiAoc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3QucmVs b3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2VuYWJsZWQ9KFthLXp8MC05XSopJykpOjpi b29sZWFuICBBTkQgcmVsLnJlbHRvYXN0cmVsaWQgIT0gMCBUSEVOIHRydWUgRUxTRSBmYWxzZSBF TkQpIEFTIHRvYXN0X2F1dG92YWN1dW0sCisKKwkoU0VMRUNUIGFycmF5X2FnZyhwcm92aWRlciB8 fCAnPScgfHwgbGFiZWwpIEZST00gcGdfc2VjbGFiZWxzIHNsMSBXSEVSRSBzbDEub2Jqb2lkPXJl bC5vaWQgQU5EIHNsMS5vYmpzdWJpZD0wKSBBUyBzZWNsYWJlbHMsCisJKENBU0UgV0hFTiByZWwu b2lkIDw9IHt7IGRhdGxhc3RzeXNvaWR9fTo6b2lkIFRIRU4gdHJ1ZSBFbFNFIGZhbHNlIEVORCkg QVMgaXNfc3lzX3RhYmxlCisJLS0gQWRkZWQgZm9yIHBhcnRpdGlvbiB0YWJsZQorICAgIHslIGlm IHRpZCAlfSwgKENBU0UgV0hFTiByZWwucmVsa2luZCA9ICdwJyBUSEVOIHBnX2dldF9wYXJ0a2V5 ZGVmKHt7IHRpZCB9fTo6b2lkKSBFTFNFICcnIEVORCkgQVMgcGFydGl0aW9uX3NjaGVtZSB7JSBl bmRpZiAlfQorRlJPTSBwZ19jbGFzcyByZWwKKyAgTEVGVCBPVVRFUiBKT0lOIHBnX3RhYmxlc3Bh Y2Ugc3BjIG9uIHNwYy5vaWQ9cmVsLnJlbHRhYmxlc3BhY2UKKyAgTEVGVCBPVVRFUiBKT0lOIHBn X2Rlc2NyaXB0aW9uIGRlcyBPTiAoZGVzLm9iam9pZD1yZWwub2lkIEFORCBkZXMub2Jqc3ViaWQ9 MCBBTkQgZGVzLmNsYXNzb2lkPSdwZ19jbGFzcyc6OnJlZ2NsYXNzKQorICBMRUZUIE9VVEVSIEpP SU4gcGdfY29uc3RyYWludCBjb24gT04gY29uLmNvbnJlbGlkPXJlbC5vaWQgQU5EIGNvbi5jb250 eXBlPSdwJworICBMRUZUIE9VVEVSIEpPSU4gcGdfY2xhc3MgdHN0IE9OIHRzdC5vaWQgPSByZWwu cmVsdG9hc3RyZWxpZAorICBMRUZUIEpPSU4gcGdfdHlwZSB0eXAgT04gcmVsLnJlbG9mdHlwZT10 eXAub2lkCitXSEVSRSByZWwucmVsa2luZCBJTiAoJ3InLCdzJywndCcsJ3AnKSBBTkQgcmVsLnJl bG5hbWVzcGFjZSA9IHt7IHNjaWQgfX06Om9pZAorQU5EIE5PVCByZWwucmVsaXNwYXJ0aXRpb24K K3slIGlmIHRpZCAlfSAgQU5EIHJlbC5vaWQgPSB7eyB0aWQgfX06Om9pZCB7JSBlbmRpZiAlfQor T1JERVIgQlkgcmVsLnJlbG5hbWU7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3Nl cnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3Rh YmxlL3NxbC9kZWZhdWx0L2NyZWF0ZS5zcWwgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3RhYmxlL3Nx bC9kZWZhdWx0L2NyZWF0ZS5zcWwKaW5kZXggZjhlODU4Zi4uNWVjOGZmYyAxMDA2NDQKLS0tIGEv d2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVt YXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvZGVmYXVsdC9jcmVhdGUuc3FsCisrKyBiL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsL2RlZmF1bHQvY3JlYXRlLnNxbApAQCAtNTcsNyAr NTcsOCBAQCBDUkVBVEUgeyUgaWYgZGF0YS5yZWxwZXJzaXN0ZW5jZSAlfVVOTE9HR0VEIHslIGVu ZGlmICV9VEFCTEUge3tjb25ufHF0SWRlbnQoZGF0YQoge3tDT05TVFJBSU5UUy5FWENMVURFKGNv bm4sIGRhdGEuZXhjbHVkZV9jb25zdHJhaW50KX19eyUgZW5kaWYgJX0KIHslIGlmIGRhdGEubGlr ZV9yZWxhdGlvbiBvciBkYXRhLmNvbGxfaW5oZXJpdHMgb3IgZGF0YS5jb2x1bW5zfGxlbmd0aCA+ IDAgb3IgZGF0YS5wcmltYXJ5X2tleXxsZW5ndGggPiAwIG9yIGRhdGEudW5pcXVlX2NvbnN0cmFp bnR8bGVuZ3RoID4gMCBvciBkYXRhLmZvcmVpZ25fa2V5fGxlbmd0aCA+IDAgb3IgZGF0YS5jaGVj a19jb25zdHJhaW50fGxlbmd0aCA+IDAgb3IgZGF0YS5leGNsdWRlX2NvbnN0cmFpbnR8bGVuZ3Ro ID4gMCAlfQogCi0pCispeyUgaWYgZGF0YS5yZWxraW5kIGlzIGRlZmluZWQgYW5kIGRhdGEucmVs a2luZCA9PSAncCcgJX0gUEFSVElUSU9OIEJZIHt7IGRhdGEucGFydGl0aW9uX3NjaGVtZSB9fSB7 JSBlbmRpZiAlfQorCiB7JSBlbmRpZiAlfQogeyMjIyBJZiB3ZSBhcmUgaW5oZXJpdGluZyBpdCBm cm9tIGFub3RoZXIgdGFibGUocykgIyMjfQogeyUgaWYgZGF0YS5jb2xsX2luaGVyaXRzICV9CmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRh YmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3RhYmxlL3NxbC9kZWZhdWx0L2dldF9zY2hl bWFfb2lkLnNxbCBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsL2RlZmF1bHQvZ2V0X3Nj aGVtYV9vaWQuc3FsCmluZGV4IDRkMzI5ZDIuLjhkZjg0YjUgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxl cy90ZW1wbGF0ZXMvdGFibGUvc3FsL2RlZmF1bHQvZ2V0X3NjaGVtYV9vaWQuc3FsCisrKyBiL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsL2RlZmF1bHQvZ2V0X3NjaGVtYV9vaWQuc3FsCkBA IC0xLDggKzEsOSBAQAogeyMgPT09PT0gZmV0Y2ggbmV3IGFzc2lnbmVkIHNjaGVtYSBvaWQgPT09 PT0gI30KIFNFTEVDVAotICAgIGMucmVsbmFtZXNwYWNlIGFzIHNjaWQKKyAgICBjLnJlbG5hbWVz cGFjZSBhcyBzY2lkLCBuc3AubnNwbmFtZSBhcyBuc3BuYW1lCiBGUk9NCiAgICAgcGdfY2xhc3Mg YworTEVGVCBKT0lOIHBnX25hbWVzcGFjZSBuc3AgT04gbnNwLm9pZCA9IGMucmVsbmFtZXNwYWNl CiBXSEVSRQogeyUgaWYgdGlkICV9CiAgICAgYy5vaWQgPSB7e3RpZH19OjpvaWQ7CmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv c2NoZW1hcy90YWJsZXMvdGVzdHMvdGVzdF90YWJsZV9hZGQucHkgYi93ZWIvcGdhZG1pbi9icm93 c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVzdHMv dGVzdF90YWJsZV9hZGQucHkKaW5kZXggMDcwM2NiYS4uOWU0ODQ2YyAxMDA2NDQKLS0tIGEvd2Vi L3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMv dGFibGVzL3Rlc3RzL3Rlc3RfdGFibGVfYWRkLnB5CisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIv c2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZXN0cy90ZXN0 X3RhYmxlX2FkZC5weQpAQCAtMTQsNiArMTQsNyBAQCBmcm9tIHBnYWRtaW4uYnJvd3Nlci5zZXJ2 ZXJfZ3JvdXBzLnNlcnZlcnMuZGF0YWJhc2VzLnNjaGVtYXMudGVzdHMgaW1wb3J0IFwKICAgICB1 dGlscyBhcyBzY2hlbWFfdXRpbHMKIGZyb20gcGdhZG1pbi5icm93c2VyLnNlcnZlcl9ncm91cHMu c2VydmVycy5kYXRhYmFzZXMudGVzdHMgaW1wb3J0IHV0aWxzIGFzIFwKICAgICBkYXRhYmFzZV91 dGlscworZnJvbSBwZ2FkbWluLmJyb3dzZXIuc2VydmVyX2dyb3Vwcy5zZXJ2ZXJzLnRlc3RzIGlt cG9ydCB1dGlscyBhcyBzZXJ2ZXJfdXRpbHMKIGZyb20gcGdhZG1pbi51dGlscy5yb3V0ZSBpbXBv cnQgQmFzZVRlc3RHZW5lcmF0b3IKIGZyb20gcmVncmVzc2lvbiBpbXBvcnQgcGFyZW50X25vZGVf ZGljdAogZnJvbSByZWdyZXNzaW9uLnB5dGhvbl90ZXN0X3V0aWxzIGltcG9ydCB0ZXN0X3V0aWxz IGFzIHV0aWxzCkBAIC0yMyw3ICsyNCwxOSBAQCBjbGFzcyBUYWJsZUFkZFRlc3RDYXNlKEJhc2VU ZXN0R2VuZXJhdG9yKToKICAgICAiIiIgVGhpcyBjbGFzcyB3aWxsIGFkZCBuZXcgY29sbGF0aW9u IHVuZGVyIHNjaGVtYSBub2RlLiAiIiIKICAgICBzY2VuYXJpb3MgPSBbCiAgICAgICAgICMgRmV0 Y2hpbmcgZGVmYXVsdCBVUkwgZm9yIHRhYmxlIG5vZGUuCi0gICAgICAgICgnRmV0Y2ggdGFibGUg Tm9kZSBVUkwnLCBkaWN0KHVybD0nL2Jyb3dzZXIvdGFibGUvb2JqLycpKQorICAgICAgICAoJ0Ny ZWF0ZSBUYWJsZScsIGRpY3QodXJsPScvYnJvd3Nlci90YWJsZS9vYmovJykpLAorICAgICAgICAo J0NyZWF0ZSBSYW5nZSBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIDIgcGFydGl0aW9ucycsCisgICAg ICAgICBkaWN0KHVybD0nL2Jyb3dzZXIvdGFibGUvb2JqLycsCisgICAgICAgICAgICAgIHNlcnZl cl9taW5fdmVyc2lvbj0xMDAwMDAsCisgICAgICAgICAgICAgIHBhcnRpdGlvbl90eXBlPSdyYW5n ZScKKyAgICAgICAgICAgICAgKQorICAgICAgICAgKSwKKyAgICAgICAgKCdDcmVhdGUgTGlzdCBw YXJ0aXRpb25lZCB0YWJsZSB3aXRoIDIgcGFydGl0aW9ucycsCisgICAgICAgICBkaWN0KHVybD0n L2Jyb3dzZXIvdGFibGUvb2JqLycsCisgICAgICAgICAgICAgIHNlcnZlcl9taW5fdmVyc2lvbj0x MDAwMDAsCisgICAgICAgICAgICAgIHBhcnRpdGlvbl90eXBlPSdsaXN0JworICAgICAgICAgICAg ICApCisgICAgICAgICApCiAgICAgXQogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtNDMsNiAr NTYsMTkgQEAgY2xhc3MgVGFibGVBZGRUZXN0Q2FzZShCYXNlVGVzdEdlbmVyYXRvcik6CiAgICAg ICAgIGlmIG5vdCBzY2hlbWFfcmVzcG9uc2U6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o IkNvdWxkIG5vdCBmaW5kIHRoZSBzY2hlbWEgdG8gYWRkIGEgdGFibGUuIikKIAorICAgICAgICBz ZWxmLmlzX3BhcnRpdGlvbiA9IEZhbHNlCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3NlcnZl cl9taW5fdmVyc2lvbicpOgorICAgICAgICAgICAgc2VydmVyX2NvbiA9IHNlcnZlcl91dGlscy5j b25uZWN0X3NlcnZlcihzZWxmLCBzZWxmLnNlcnZlcl9pZCkKKyAgICAgICAgICAgIGlmIG5vdCBz ZXJ2ZXJfY29uWyJpbmZvIl0gPT0gIlNlcnZlciBjb25uZWN0ZWQuIjoKKyAgICAgICAgICAgICAg ICByYWlzZSBFeGNlcHRpb24oIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciB0byBhZGQgIgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFydGl0aW9uZWQgdGFibGUuIikKKyAg ICAgICAgICAgIGlmIHNlcnZlcl9jb25bImRhdGEiXVsidmVyc2lvbiJdIDwgc2VsZi5zZXJ2ZXJf bWluX3ZlcnNpb246CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJQYXJ0aXRpb25lZCB0YWJs ZSBhcmUgbm90IHN1cHBvcnRlZCBieSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBQ QVMvUEcgMTAuMCBhbmQgYmVsb3cuIgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QobWVz c2FnZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5pc19wYXJ0aXRp b24gPSBUcnVlCisKICAgICBkZWYgcnVuVGVzdChzZWxmKToKICAgICAgICAgIiIiIFRoaXMgZnVu Y3Rpb24gd2lsbCBhZGQgdGFibGUgdW5kZXIgc2NoZW1hIG5vZGUuICIiIgogICAgICAgICBkYl91 c2VyID0gc2VsZi5zZXJ2ZXJbInVzZXJuYW1lIl0KQEAgLTY4LDcgKzk0LDcgQEAgY2xhc3MgVGFi bGVBZGRUZXN0Q2FzZShCYXNlVGVzdEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgICAgICJz ZWNsYWJlbHMiOiBbXQogICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgeyJuYW1l IjogIkRPSiIsCi0gICAgICAgICAgICAgICAgICJjbHR5cGUiOiAiZGF0ZVtdIiwKKyAgICAgICAg ICAgICAgICAgImNsdHlwZSI6ICJkYXRlIiwKICAgICAgICAgICAgICAgICAgImF0dGFjbCI6IFtd LAogICAgICAgICAgICAgICAgICAiaXNfcHJpbWFyeV9rZXkiOiBGYWxzZSwKICAgICAgICAgICAg ICAgICAgImF0dG9wdGlvbnMiOiBbXSwKQEAgLTc2LDcgKzEwMiw3IEBAIGNsYXNzIFRhYmxlQWRk VGVzdENhc2UoQmFzZVRlc3RHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICBdLAogICAgICAgICAgICAgImV4Y2x1ZGVfY29uc3RyYWludCI6IFtdLAotICAgICAgICAg ICAgImZpbGxmYWN0b3IiOiAiMTEiLAorICAgICAgICAgICAgImZpbGxmYWN0b3IiOiAiIiwKICAg ICAgICAgICAgICJoYXN0b2FzdHRhYmxlIjogVHJ1ZSwKICAgICAgICAgICAgICJsaWtlX2NvbnN0 cmFpbnRzIjogVHJ1ZSwKICAgICAgICAgICAgICJsaWtlX2RlZmF1bHRfdmFsdWUiOiBUcnVlLApA QCAtMTY2LDYgKzE5MiwzNSBAQCBjbGFzcyBUYWJsZUFkZFRlc3RDYXNlKEJhc2VUZXN0R2VuZXJh dG9yKToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBdCiAgICAgICAgIH0KKworICAg ICAgICBpZiBzZWxmLmlzX3BhcnRpdGlvbjoKKyAgICAgICAgICAgIGRhdGFbJ3BhcnRpdGlvbl90 eXBlJ10gPSBzZWxmLnBhcnRpdGlvbl90eXBlCisgICAgICAgICAgICBkYXRhWydpc19wYXJ0aXRp b25lZCddID0gVHJ1ZQorICAgICAgICAgICAgaWYgc2VsZi5wYXJ0aXRpb25fdHlwZSA9PSAncmFu Z2UnOgorICAgICAgICAgICAgICAgIGRhdGFbJ3BhcnRpdGlvbnMnXSA9IFwKKyAgICAgICAgICAg ICAgICAgICAgW3sndmFsdWVzX2Zyb20nOiAiJzIwMTAtMDEtMDEnIiwKKyAgICAgICAgICAgICAg ICAgICAgICAndmFsdWVzX3RvJzogIicyMDEwLTEyLTMxJyIsCisgICAgICAgICAgICAgICAgICAg ICAgJ2lzX2F0dGFjaCc6IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICdwYXJ0aXRpb25f bmFtZSc6ICdlbXBfMjAxMCcKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg ICAgICAgICAgeyd2YWx1ZXNfZnJvbSc6ICInMjAxMS0wMS0wMSciLAorICAgICAgICAgICAgICAg ICAgICAgICd2YWx1ZXNfdG8nOiAiJzIwMTEtMTItMzEnIiwKKyAgICAgICAgICAgICAgICAgICAg ICAnaXNfYXR0YWNoJzogRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgJ3BhcnRpdGlvbl9u YW1lJzogJ2VtcF8yMDExJworICAgICAgICAgICAgICAgICAgICAgIH1dCisgICAgICAgICAgICBl bHNlOgorICAgICAgICAgICAgICAgIGRhdGFbJ3BhcnRpdGlvbnMnXSA9IFwKKyAgICAgICAgICAg ICAgICAgICAgW3sndmFsdWVzX2luJzogIicyMDEyLTAxLTAxJywgJzIwMTItMTItMzEnIiwKKyAg ICAgICAgICAgICAgICAgICAgICAnaXNfYXR0YWNoJzogRmFsc2UsCisgICAgICAgICAgICAgICAg ICAgICAgJ3BhcnRpdGlvbl9uYW1lJzogJ2VtcF8yMDEyJworICAgICAgICAgICAgICAgICAgICAg IH0sCisgICAgICAgICAgICAgICAgICAgICB7J3ZhbHVlc19pbic6ICInMjAxMy0wMS0wMScsICcy MDEzLTEyLTMxJyIsCisgICAgICAgICAgICAgICAgICAgICAgJ2lzX2F0dGFjaCc6IEZhbHNlLAor ICAgICAgICAgICAgICAgICAgICAgICdwYXJ0aXRpb25fbmFtZSc6ICdlbXBfMjAxMycKKyAgICAg ICAgICAgICAgICAgICAgICB9XQorICAgICAgICAgICAgZGF0YVsncGFydGl0aW9uX2tleXMnXSA9 IFwKKyAgICAgICAgICAgICAgICBbeydrZXlfdHlwZSc6ICdjb2x1bW4nLCAncHRfY29sdW1uJzog J0RPSid9XQorCiAgICAgICAgICMgQWRkIHRhYmxlCiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi50 ZXN0ZXIucG9zdCgKICAgICAgICAgICAgIHNlbGYudXJsICsgc3RyKHV0aWxzLlNFUlZFUl9HUk9V UCkgKyAnLycgKwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rlc3RzL3Rlc3RfdGFibGVfZGVsZXRl LnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2Vz L3NjaGVtYXMvdGFibGVzL3Rlc3RzL3Rlc3RfdGFibGVfZGVsZXRlLnB5CmluZGV4IDFiMmY5ZjUu Ljk3NDlmZWQgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9z ZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZXN0cy90ZXN0X3RhYmxlX2RlbGV0ZS5w eQorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFz ZXMvc2NoZW1hcy90YWJsZXMvdGVzdHMvdGVzdF90YWJsZV9kZWxldGUucHkKQEAgLTIzLDcgKzIz LDcgQEAgY2xhc3MgVGFibGVEZWxldGVUZXN0Q2FzZShCYXNlVGVzdEdlbmVyYXRvcik6CiAgICAg IiIiVGhpcyBjbGFzcyB3aWxsIGRlbGV0ZSBuZXcgdGFibGUgdW5kZXIgc2NoZW1hIG5vZGUuIiIi CiAgICAgc2NlbmFyaW9zID0gWwogICAgICAgICAjIEZldGNoaW5nIGRlZmF1bHQgVVJMIGZvciB0 YWJsZSBub2RlLgotICAgICAgICAoJ0ZldGNoIHRhYmxlIE5vZGUgVVJMJywgZGljdCh1cmw9Jy9i cm93c2VyL3RhYmxlL29iai8nKSkKKyAgICAgICAgKCdEZWxldGUgVGFibGUnLCBkaWN0KHVybD0n L2Jyb3dzZXIvdGFibGUvb2JqLycpKQogICAgIF0KIAogICAgIGRlZiBzZXRVcChzZWxmKToKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9zY2hlbWFzL3RhYmxlcy90ZXN0cy90ZXN0X3RhYmxlX3B1dC5weSBiL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90 ZXN0cy90ZXN0X3RhYmxlX3B1dC5weQppbmRleCBiZmJmODg0Li5lZjQ3NmQ3IDEwMDY0NAotLS0g YS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2No ZW1hcy90YWJsZXMvdGVzdHMvdGVzdF90YWJsZV9wdXQucHkKKysrIGIvd2ViL3BnYWRtaW4vYnJv d3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rlc3Rz L3Rlc3RfdGFibGVfcHV0LnB5CkBAIC0xNCw2ICsxNCw3IEBAIGZyb20gcGdhZG1pbi5icm93c2Vy LnNlcnZlcl9ncm91cHMuc2VydmVycy5kYXRhYmFzZXMuc2NoZW1hcy50ZXN0cyBpbXBvcnQgXAog ICAgIHV0aWxzIGFzIHNjaGVtYV91dGlscwogZnJvbSBwZ2FkbWluLmJyb3dzZXIuc2VydmVyX2dy b3Vwcy5zZXJ2ZXJzLmRhdGFiYXNlcy50ZXN0cyBpbXBvcnQgdXRpbHMgYXMgXAogICAgIGRhdGFi YXNlX3V0aWxzCitmcm9tIHBnYWRtaW4uYnJvd3Nlci5zZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMudGVz dHMgaW1wb3J0IHV0aWxzIGFzIHNlcnZlcl91dGlscwogZnJvbSBwZ2FkbWluLnV0aWxzLnJvdXRl IGltcG9ydCBCYXNlVGVzdEdlbmVyYXRvcgogZnJvbSByZWdyZXNzaW9uIGltcG9ydCBwYXJlbnRf bm9kZV9kaWN0CiBmcm9tIHJlZ3Jlc3Npb24ucHl0aG9uX3Rlc3RfdXRpbHMgaW1wb3J0IHRlc3Rf dXRpbHMgYXMgdXRpbHMKQEAgLTI0LDcgKzI1LDQ5IEBAIGNsYXNzIFRhYmxlVXBkYXRlVGVzdENh c2UoQmFzZVRlc3RHZW5lcmF0b3IpOgogICAgICIiIlRoaXMgY2xhc3Mgd2lsbCBhZGQgbmV3IGNv bGxhdGlvbiB1bmRlciBzY2hlbWEgbm9kZS4iIiIKICAgICBzY2VuYXJpb3MgPSBbCiAgICAgICAg ICMgRmV0Y2hpbmcgZGVmYXVsdCBVUkwgZm9yIHRhYmxlIG5vZGUuCi0gICAgICAgICgnRmV0Y2gg dGFibGUgTm9kZSBVUkwnLCBkaWN0KHVybD0nL2Jyb3dzZXIvdGFibGUvb2JqLycpKQorICAgICAg ICAoJ1VwZGF0ZSBUYWJsZScsIGRpY3QodXJsPScvYnJvd3Nlci90YWJsZS9vYmovJykpLAorICAg ICAgICAoJ0NyZWF0ZSBwYXJ0aXRpb25zIG9mIGV4aXN0aW5nIHJhbmdlIHBhcnRpdGlvbmVkIHRh YmxlJywKKyAgICAgICAgIGRpY3QodXJsPScvYnJvd3Nlci90YWJsZS9vYmovJywKKyAgICAgICAg ICAgICAgc2VydmVyX21pbl92ZXJzaW9uPTEwMDAwMCwKKyAgICAgICAgICAgICAgcGFydGl0aW9u X3R5cGU9J3JhbmdlJywKKyAgICAgICAgICAgICAgbW9kZT0nY3JlYXRlJworICAgICAgICAgICAg ICApCisgICAgICAgICApLAorICAgICAgICAoJ0NyZWF0ZSBwYXJ0aXRpb25zIG9mIGV4aXN0aW5n IGxpc3QgcGFydGl0aW9uZWQgdGFibGUnLAorICAgICAgICAgZGljdCh1cmw9Jy9icm93c2VyL3Rh YmxlL29iai8nLAorICAgICAgICAgICAgICBzZXJ2ZXJfbWluX3ZlcnNpb249MTAwMDAwLAorICAg ICAgICAgICAgICBwYXJ0aXRpb25fdHlwZT0nbGlzdCcsCisgICAgICAgICAgICAgIG1vZGU9J2Ny ZWF0ZScKKyAgICAgICAgICAgICAgKQorICAgICAgICAgKSwKKyAgICAgICAgKCdEZXRhY2ggcGFy dGl0aW9uIGZyb20gZXhpc3RpbmcgcmFuZ2UgcGFydGl0aW9uZWQgdGFibGUnLAorICAgICAgICAg ZGljdCh1cmw9Jy9icm93c2VyL3RhYmxlL29iai8nLAorICAgICAgICAgICAgICBzZXJ2ZXJfbWlu X3ZlcnNpb249MTAwMDAwLAorICAgICAgICAgICAgICBwYXJ0aXRpb25fdHlwZT0ncmFuZ2UnLAor ICAgICAgICAgICAgICBtb2RlPSdkZXRhY2gnCisgICAgICAgICAgICAgICkKKyAgICAgICAgICks CisgICAgICAgICgnRGV0YWNoIHBhcnRpdGlvbiBmcm9tIGV4aXN0aW5nIGxpc3QgcGFydGl0aW9u ZWQgdGFibGUnLAorICAgICAgICAgZGljdCh1cmw9Jy9icm93c2VyL3RhYmxlL29iai8nLAorICAg ICAgICAgICAgICBzZXJ2ZXJfbWluX3ZlcnNpb249MTAwMDAwLAorICAgICAgICAgICAgICBwYXJ0 aXRpb25fdHlwZT0nbGlzdCcsCisgICAgICAgICAgICAgIG1vZGU9J2RldGFjaCcKKyAgICAgICAg ICAgICAgKQorICAgICAgICAgKSwKKyAgICAgICAgKCdBdHRhY2ggcGFydGl0aW9uIHRvIGV4aXN0 aW5nIHJhbmdlIHBhcnRpdGlvbmVkIHRhYmxlJywKKyAgICAgICAgIGRpY3QodXJsPScvYnJvd3Nl ci90YWJsZS9vYmovJywKKyAgICAgICAgICAgICAgc2VydmVyX21pbl92ZXJzaW9uPTEwMDAwMCwK KyAgICAgICAgICAgICAgcGFydGl0aW9uX3R5cGU9J3JhbmdlJywKKyAgICAgICAgICAgICAgbW9k ZT0nYXR0YWNoJworICAgICAgICAgICAgICApCisgICAgICAgICApLAorICAgICAgICAoJ0F0dGFj aCBwYXJ0aXRpb24gdG8gZXhpc3RpbmcgbGlzdCBwYXJ0aXRpb25lZCB0YWJsZScsCisgICAgICAg ICBkaWN0KHVybD0nL2Jyb3dzZXIvdGFibGUvb2JqLycsCisgICAgICAgICAgICAgIHNlcnZlcl9t aW5fdmVyc2lvbj0xMDAwMDAsCisgICAgICAgICAgICAgIHBhcnRpdGlvbl90eXBlPSdsaXN0JywK KyAgICAgICAgICAgICAgbW9kZT0nYXR0YWNoJworICAgICAgICAgICAgICApCisgICAgICAgICAp CiAgICAgXQogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtNDQsOSArODcsMzEgQEAgY2xhc3Mg VGFibGVVcGRhdGVUZXN0Q2FzZShCYXNlVGVzdEdlbmVyYXRvcik6CiAgICAgICAgIGlmIG5vdCBz Y2hlbWFfcmVzcG9uc2U6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvdWxkIG5vdCBm aW5kIHRoZSBzY2hlbWEgdG8gYWRkIGEgdGFibGUuIikKICAgICAgICAgc2VsZi50YWJsZV9uYW1l ID0gInRlc3RfdGFibGVfcHV0XyVzIiAlIChzdHIodXVpZC51dWlkNCgpKVsxOjZdKQotICAgICAg ICBzZWxmLnRhYmxlX2lkID0gdGFibGVzX3V0aWxzLmNyZWF0ZV90YWJsZShzZWxmLnNlcnZlciwg c2VsZi5kYl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzZWxmLnNjaGVtYV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlX25hbWUpCisKKyAgICAgICAgc2VsZi5pc19w YXJ0aXRpb24gPSBGYWxzZQorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdzZXJ2ZXJfbWluX3Zl cnNpb24nKToKKyAgICAgICAgICAgIHNlcnZlcl9jb24gPSBzZXJ2ZXJfdXRpbHMuY29ubmVjdF9z ZXJ2ZXIoc2VsZiwgc2VsZi5zZXJ2ZXJfaWQpCisgICAgICAgICAgICBpZiBub3Qgc2VydmVyX2Nv blsiaW5mbyJdID09ICJTZXJ2ZXIgY29ubmVjdGVkLiI6CisgICAgICAgICAgICAgICAgcmFpc2Ug RXhjZXB0aW9uKCJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIgdG8gYWRkICIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgInBhcnRpdGlvbmVkIHRhYmxlLiIpCisgICAgICAgICAg ICBpZiBzZXJ2ZXJfY29uWyJkYXRhIl1bInZlcnNpb24iXSA8IHNlbGYuc2VydmVyX21pbl92ZXJz aW9uOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAiUGFydGl0aW9uZWQgdGFibGUgYXJlIG5v dCBzdXBwb3J0ZWQgYnkgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQUEFTL1BHIDEw LjAgYW5kIGJlbG93LiIKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KG1lc3NhZ2UpCisg ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuaXNfcGFydGl0aW9uID0gVHJ1 ZQorCisgICAgICAgICAgICBzZWxmLnRhYmxlX2lkID0gdGFibGVzX3V0aWxzLmNyZWF0ZV90YWJs ZV9mb3JfcGFydGl0aW9uKAorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLAorICAgICAgICAg ICAgICAgIHNlbGYuZGJfbmFtZSwKKyAgICAgICAgICAgICAgICBzZWxmLnNjaGVtYV9uYW1lLAor ICAgICAgICAgICAgICAgIHNlbGYudGFibGVfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFydGl0 aW9uZWQnLAorICAgICAgICAgICAgICAgIHNlbGYucGFydGl0aW9uX3R5cGUpCisgICAgICAgIGVs c2U6CisgICAgICAgICAgICBzZWxmLnRhYmxlX2lkID0gdGFibGVzX3V0aWxzLmNyZWF0ZV90YWJs ZShzZWxmLnNlcnZlciwgc2VsZi5kYl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zY2hlbWFfbmFtZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFibGVfbmFt ZSkKIAogICAgIGRlZiBydW5UZXN0KHNlbGYpOgogICAgICAgICAiIiJUaGlzIGZ1bmN0aW9uIHdp bGwgZmV0Y2ggYWRkZWQgdGFibGUgdW5kZXIgc2NoZW1hIG5vZGUuIiIiCkBAIC01NCwxMCArMTE5 LDE4IEBAIGNsYXNzIFRhYmxlVXBkYXRlVGVzdENhc2UoQmFzZVRlc3RHZW5lcmF0b3IpOgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJs ZV9pZCkKICAgICAgICAgaWYgbm90IHRhYmxlX3Jlc3BvbnNlOgogICAgICAgICAgICAgcmFpc2Ug RXhjZXB0aW9uKCJDb3VsZCBub3QgZmluZCB0aGUgdGFibGUgdG8gdXBkYXRlLiIpCi0gICAgICAg IGRhdGEgPSB7Ci0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyBpcyB0ZXN0IGNvbW1l bnQgZm9yIHRhYmxlIiwKLSAgICAgICAgICAgICJpZCI6IHNlbGYudGFibGVfaWQKLSAgICAgICAg fQorCisgICAgICAgIGlmIHNlbGYuaXNfcGFydGl0aW9uOgorICAgICAgICAgICAgZGF0YSA9IHsi aWQiOiBzZWxmLnRhYmxlX2lkfQorICAgICAgICAgICAgdGFibGVzX3V0aWxzLnNldF9wYXJ0aXRp b25fZGF0YSgKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlciwgc2VsZi5kYl9uYW1lLCBzZWxm LnNjaGVtYV9uYW1lLCBzZWxmLnRhYmxlX25hbWUsCisgICAgICAgICAgICAgICAgc2VsZi5wYXJ0 aXRpb25fdHlwZSwgZGF0YSwgc2VsZi5tb2RlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg ZGF0YSA9IHsKKyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyBpcyB0ZXN0IGNv bW1lbnQgZm9yIHRhYmxlIiwKKyAgICAgICAgICAgICAgICAiaWQiOiBzZWxmLnRhYmxlX2lkCisg ICAgICAgICAgICB9CisKICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnRlc3Rlci5wdXQoCiAgICAg ICAgICAgICBzZWxmLnVybCArIHN0cih1dGlscy5TRVJWRVJfR1JPVVApICsgJy8nICsKICAgICAg ICAgICAgIHN0cihzZWxmLnNlcnZlcl9pZCkgKyAnLycgKyBzdHIoc2VsZi5kYl9pZCkgKyAnLycg KwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rlc3RzL3V0aWxzLnB5IGIvd2ViL3BnYWRtaW4vYnJv d3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rlc3Rz L3V0aWxzLnB5CmluZGV4IDQ1NmYwMjAuLjBjN2FlZGUgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90 ZXN0cy91dGlscy5weQorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVzdHMvdXRpbHMucHkKQEAgLTg1LDMgKzg1 LDE1MyBAQCBkZWYgdmVyaWZ5X3RhYmxlKHNlcnZlciwgZGJfbmFtZSwgdGFibGVfaWQpOgogICAg IGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1zeXMu c3RkZXJyKQogICAgICAgICByYWlzZQorCisKK2RlZiBjcmVhdGVfdGFibGVfZm9yX3BhcnRpdGlv bihzZXJ2ZXIsIGRiX25hbWUsIHNjaGVtYV9uYW1lLCB0YWJsZV9uYW1lLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRhYmxlX3R5cGUsIHBhcnRpdGlvbl90eXBlLCBwYXJ0aXRpb25f bmFtZT1Ob25lKToKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgcGFydGl0aW9u ZWQvcGFydGl0aW9uL3JlZ3VsYXIgdGFibGUKKyAgICB1bmRlciBwcm92aWRlZCBzY2hlbWEuCisK KyAgICA6cGFyYW0gc2VydmVyOiBzZXJ2ZXIgZGV0YWlscworICAgIDpwYXJhbSBkYl9uYW1lOiBk YXRhYmFzZSBuYW1lCisgICAgOnBhcmFtIHNjaGVtYV9uYW1lOiBzY2hlbWEgbmFtZQorICAgIDpw YXJhbSB0YWJsZV9uYW1lOiB0YWJsZSBuYW1lCisgICAgOnBhcmFtIHRhYmxlX3R5cGU6IHJlZ3Vs YXIvcGFydGl0aW9uZWQvcGFydGl0aW9uCisgICAgOnBhcmFtIHBhcnRpdGlvbl90eXBlOiBwYXJ0 aXRpb24gdGFibGUgdHlwZSAocmFuZ2UvbGlzdCkKKyAgICA6cGFyYW0gcGFydGl0aW9uX25hbWU6 IFBhcnRpdGlvbiBOYW1lCisgICAgOnJldHVybiB0YWJsZV9pZDogdGFibGUgaWQKKyAgICAiIiIK KyAgICB0cnk6CisgICAgICAgIGNvbm5lY3Rpb24gPSB1dGlscy5nZXRfZGJfY29ubmVjdGlvbihk Yl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vy dmVyWyd1c2VybmFtZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2VydmVyWydkYl9wYXNzd29yZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2VydmVyWydob3N0J10sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJbJ3BvcnQnXSkKKyAgICAgICAgb2xkX2lzb2xh dGlvbl9sZXZlbCA9IGNvbm5lY3Rpb24uaXNvbGF0aW9uX2xldmVsCisgICAgICAgIGNvbm5lY3Rp b24uc2V0X2lzb2xhdGlvbl9sZXZlbCgwKQorICAgICAgICBwZ19jdXJzb3IgPSBjb25uZWN0aW9u LmN1cnNvcigpCisKKyAgICAgICAgcXVlcnkgPSAnJworICAgICAgICBpZiB0YWJsZV90eXBlID09 ICdwYXJ0aXRpb25lZCc6CisgICAgICAgICAgICBpZiBwYXJ0aXRpb25fdHlwZSA9PSAncmFuZ2Un OgorICAgICAgICAgICAgICAgIHF1ZXJ5ID0gIkNSRUFURSBUQUJMRSAlcy4lcyhjb3VudHJ5IHRl eHQsIHNhbGVzIGJpZ2ludCwgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAic2FsZWRhdGUg ZGF0ZSkgUEFSVElUSU9OIEJZIFJBTkdFKHNhbGVkYXRlKSIgJSBcCisgICAgICAgICAgICAgICAg ICAgICAgICAoc2NoZW1hX25hbWUsIHRhYmxlX25hbWUpCisgICAgICAgICAgICBlbHNlOgorICAg ICAgICAgICAgICAgIHF1ZXJ5ID0gIkNSRUFURSBUQUJMRSAlcy4lcyhjb3VudHJ5IHRleHQsIHNh bGVzIGJpZ2ludCwgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAic2FsZWRhdGUgZGF0ZSkg UEFSVElUSU9OIEJZIExJU1Qoc2FsZWRhdGUpIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAg IChzY2hlbWFfbmFtZSwgdGFibGVfbmFtZSkKKyAgICAgICAgZWxpZiB0YWJsZV90eXBlID09ICdw YXJ0aXRpb24nOgorICAgICAgICAgICAgaWYgcGFydGl0aW9uX3R5cGUgPT0gJ3JhbmdlJzoKKyAg ICAgICAgICAgICAgICBxdWVyeSA9ICJDUkVBVEUgVEFCTEUgJXMuJXMgUEFSVElUSU9OIE9GICVz LiVzICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgIkZPUiBWQUxVRVMgRlJPTSAoJzIwMTIt MDEtMDEnKSBUTyAoJzIwMTItMTItMzEnKSIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAo c2NoZW1hX25hbWUsIHBhcnRpdGlvbl9uYW1lLCBzY2hlbWFfbmFtZSwgdGFibGVfbmFtZSkKKyAg ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcXVlcnkgPSAiQ1JFQVRFIFRBQkxFICVz LiVzIFBBUlRJVElPTiBPRiAlcy4lcyAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICJGT1Ig VkFMVUVTIElOICgnMjAxMy0wMS0wMScpIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChz Y2hlbWFfbmFtZSwgcGFydGl0aW9uX25hbWUsIHNjaGVtYV9uYW1lLCB0YWJsZV9uYW1lKQorCisg ICAgICAgICAgICAjIFRvIGZldGNoIE9JRCB0YWJsZSBuYW1lIGlzIGFjdHVhbGx5IHBhcnRpdGlv biBuYW1lCisgICAgICAgICAgICB0YWJsZV9uYW1lID0gcGFydGl0aW9uX25hbWUKKyAgICAgICAg ZWxpZiB0YWJsZV90eXBlID09ICdyZWd1bGFyJzoKKyAgICAgICAgICAgIHF1ZXJ5ID0gIkNSRUFU RSBUQUJMRSAlcy4lcyhjb3VudHJ5IHRleHQsIHNhbGVzIGJpZ2ludCwiIFwKKyAgICAgICAgICAg ICAgICAgICAgInNhbGVkYXRlIGRhdGUgTk9UIE5VTEwpIiAlIChzY2hlbWFfbmFtZSwgdGFibGVf bmFtZSkKKworICAgICAgICBwZ19jdXJzb3IuZXhlY3V0ZShxdWVyeSkKKyAgICAgICAgY29ubmVj dGlvbi5zZXRfaXNvbGF0aW9uX2xldmVsKG9sZF9pc29sYXRpb25fbGV2ZWwpCisgICAgICAgIGNv bm5lY3Rpb24uY29tbWl0KCkKKyAgICAgICAgIyBHZXQgJ29pZCcgZnJvbSBuZXdseSBjcmVhdGVk IHRhYmxlCisgICAgICAgIHBnX2N1cnNvci5leGVjdXRlKCJzZWxlY3Qgb2lkIGZyb20gcGdfY2xh c3Mgd2hlcmUgcmVsbmFtZT0nJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxl X25hbWUpCisgICAgICAgIHRhYmxlID0gcGdfY3Vyc29yLmZldGNob25lKCkKKyAgICAgICAgdGFi bGVfaWQgPSAnJworICAgICAgICBpZiB0YWJsZToKKyAgICAgICAgICAgIHRhYmxlX2lkID0gdGFi bGVbMF0KKyAgICAgICAgY29ubmVjdGlvbi5jbG9zZSgpCisgICAgICAgIHJldHVybiB0YWJsZV9p ZAorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmls ZT1zeXMuc3RkZXJyKQorICAgICAgICByYWlzZQorCisKK2RlZiBzZXRfcGFydGl0aW9uX2RhdGEo c2VydmVyLCBkYl9uYW1lLCBzY2hlbWFfbmFtZSwgdGFibGVfbmFtZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgcGFydGl0aW9uX3R5cGUsIGRhdGEsIG1vZGUpOgorICAgICIiIgorICAgIFRoaXMg ZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgdGhlIHBhcnRpdGlvbnMgZGF0YSBvbiB0aGUgYmFzaXMg b2YKKyAgICBwYXJ0aXRpb24gdHlwZSBhbmQgYWN0aW9uLgorCisgICAgOnBhcmFtIHNlcnZlcjog c2VydmVyIGRldGFpbHMKKyAgICA6cGFyYW0gZGJfbmFtZTogRGF0YWJhc2UgTmFtZQorICAgIDpw YXJhbSBzY2hlbWFfbmFtZTogU2NoZW1hIE5hbWUKKyAgICA6cGFyYW0gdGFibGVfbmFtZTogVGFi bGUgTmFtZQorICAgIDpwYXJhbSBwYXJ0aXRpb25fdHlwZTogcmFuZ2Ugb3IgbGlzdAorICAgIDpw YXJhbSBkYXRhOiBEYXRhCisgICAgOnBhcmFtIG1vZGU6IGNyZWF0ZS9kZXRhY2gKKyAgICA6cmV0 dXJuOgorICAgICIiIgorCisgICAgZGF0YVsncGFydGl0aW9ucyddID0gZGljdCgpCisgICAgaWYg cGFydGl0aW9uX3R5cGUgPT0gJ3JhbmdlJyBhbmQgbW9kZSA9PSAnY3JlYXRlJzoKKyAgICAgICAg ZGF0YVsncGFydGl0aW9ucyddLnVwZGF0ZSgKKyAgICAgICAgICAgIHsnYWRkZWQnOiBbeyd2YWx1 ZXNfZnJvbSc6ICInMjAxNC0wMS0wMSciLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVl c190byc6ICInMjAxNC0xMi0zMSciLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX2F0dGFj aCc6IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnRpdGlvbl9uYW1lJzogJ3Nh bGVfMjAxNCd9LAorICAgICAgICAgICAgICAgICAgICAgICB7J3ZhbHVlc19mcm9tJzogIicyMDE1 LTAxLTAxJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWVzX3RvJzogIicyMDE1LTEy LTMxJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAnaXNfYXR0YWNoJzogRmFsc2UsCisgICAg ICAgICAgICAgICAgICAgICAgICAncGFydGl0aW9uX25hbWUnOiAnc2FsZV8yMDE1JworICAgICAg ICAgICAgICAgICAgICAgICAgfV0KKyAgICAgICAgICAgICB9CisgICAgICAgICkKKyAgICBlbGlm IHBhcnRpdGlvbl90eXBlID09ICdsaXN0JyBhbmQgbW9kZSA9PSAnY3JlYXRlJzoKKyAgICAgICAg ZGF0YVsncGFydGl0aW9ucyddLnVwZGF0ZSgKKyAgICAgICAgICAgIHsnYWRkZWQnOiBbeyd2YWx1 ZXNfaW4nOiAiJzIwMTYtMDEtMDEnLCAnMjAxNi0xMi0zMSciLAorICAgICAgICAgICAgICAgICAg ICAgICAgJ2lzX2F0dGFjaCc6IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnRp dGlvbl9uYW1lJzogJ3NhbGVfMjAxNid9LAorICAgICAgICAgICAgICAgICAgICAgICB7J3ZhbHVl c19pbic6ICInMjAxNy0wMS0wMScsICcyMDE3LTEyLTMxJyIsCisgICAgICAgICAgICAgICAgICAg ICAgICAnaXNfYXR0YWNoJzogRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAncGFydGl0 aW9uX25hbWUnOiAnc2FsZV8yMDE3JworICAgICAgICAgICAgICAgICAgICAgICAgfV0KKyAgICAg ICAgICAgICB9CisgICAgICAgICkKKyAgICBlbGlmIHBhcnRpdGlvbl90eXBlID09ICdyYW5nZScg YW5kIG1vZGUgPT0gJ2RldGFjaCc6CisgICAgICAgIHBhcnRpdGlvbl9pZCA9IGNyZWF0ZV90YWJs ZV9mb3JfcGFydGl0aW9uKHNlcnZlciwgZGJfbmFtZSwgc2NoZW1hX25hbWUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX25hbWUsICdwYXJ0 aXRpb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwYXJ0aXRpb25fdHlwZSwgJ3NhbGVfMjAxMicpCisgICAgICAgIGRhdGFbJ3BhcnRpdGlvbnMn XS51cGRhdGUoCisgICAgICAgICAgICB7J2RlbGV0ZWQnOiBbeydvaWQnOiBwYXJ0aXRpb25faWR9 XQorICAgICAgICAgICAgIH0KKyAgICAgICAgKQorICAgIGVsaWYgcGFydGl0aW9uX3R5cGUgPT0g J2xpc3QnIGFuZCBtb2RlID09ICdkZXRhY2gnOgorICAgICAgICBwYXJ0aXRpb25faWQgPSBjcmVh dGVfdGFibGVfZm9yX3BhcnRpdGlvbihzZXJ2ZXIsIGRiX25hbWUsIHNjaGVtYV9uYW1lLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9uYW1l LCAncGFydGl0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGFydGl0aW9uX3R5cGUsICdzYWxlXzIwMTMnKQorICAgICAgICBkYXRhWydwYXJ0 aXRpb25zJ10udXBkYXRlKAorICAgICAgICAgICAgeydkZWxldGVkJzogW3snb2lkJzogcGFydGl0 aW9uX2lkfV0KKyAgICAgICAgICAgICB9CisgICAgICAgICkKKyAgICBlbGlmIHBhcnRpdGlvbl90 eXBlID09ICdyYW5nZScgYW5kIG1vZGUgPT0gJ2F0dGFjaCc6CisgICAgICAgIHBhcnRpdGlvbl9p ZCA9IGNyZWF0ZV90YWJsZV9mb3JfcGFydGl0aW9uKHNlcnZlciwgZGJfbmFtZSwgc2NoZW1hX25h bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdh dHRhY2hfc2FsZV8yMDEwJywgJ3JlZ3VsYXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25fdHlwZSkKKyAgICAgICAgZGF0YVsncGFy dGl0aW9ucyddLnVwZGF0ZSgKKyAgICAgICAgICAgIHsnYWRkZWQnOiBbeyd2YWx1ZXNfZnJvbSc6 ICInMjAxMC0wMS0wMSciLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlc190byc6ICIn MjAxMC0xMi0zMSciLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX2F0dGFjaCc6IFRydWUs CisgICAgICAgICAgICAgICAgICAgICAgICAncGFydGl0aW9uX25hbWUnOiBwYXJ0aXRpb25faWQK KyAgICAgICAgICAgICAgICAgICAgICAgIH1dCisgICAgICAgICAgICAgfQorICAgICAgICApCisg ICAgZWxpZiBwYXJ0aXRpb25fdHlwZSA9PSAnbGlzdCcgYW5kIG1vZGUgPT0gJ2F0dGFjaCc6Cisg ICAgICAgIHBhcnRpdGlvbl9pZCA9IGNyZWF0ZV90YWJsZV9mb3JfcGFydGl0aW9uKHNlcnZlciwg ZGJfbmFtZSwgc2NoZW1hX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdhdHRhY2hfc2FsZV8yMDExJywgJ3JlZ3VsYXInLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25fdHlwZSkK KyAgICAgICAgZGF0YVsncGFydGl0aW9ucyddLnVwZGF0ZSgKKyAgICAgICAgICAgIHsnYWRkZWQn OiBbeyd2YWx1ZXNfaW4nOiAiJzIwMTEtMDEtMDEnIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICdpc19hdHRhY2gnOiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnRpdGlvbl9u YW1lJzogcGFydGl0aW9uX2lkCisgICAgICAgICAgICAgICAgICAgICAgICB9XQorICAgICAgICAg ICAgIH0KKyAgICAgICAgKQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RyaWdnZXJzL3RlbXBsYXRl cy90cmlnZ2VyL2pzL3RyaWdnZXIuanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdHJpZ2dlcnMvdGVtcGxhdGVzL3Ry aWdnZXIvanMvdHJpZ2dlci5qcwppbmRleCAxNjIzZmU1Li44N2YxZWIzIDEwMDY0NAotLS0gYS93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvdHJpZ2dlcnMvdGVtcGxhdGVzL3RyaWdnZXIvanMvdHJpZ2dlci5qcworKysgYi93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvdHJpZ2dlcnMvdGVtcGxhdGVzL3RyaWdnZXIvanMvdHJpZ2dlci5qcwpAQCAtMzAs MTMgKzMwLDE1IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnRyaWdnZXInLCBbCiAgICAgICAgIG5v ZGU6ICd0cmlnZ2VyJywKICAgICAgICAgbGFiZWw6IGdldHRleHQoJ1RyaWdnZXJzJyksCiAgICAg ICAgIHR5cGU6ICdjb2xsLXRyaWdnZXInLAorICAgICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTog cGdCcm93c2VyLnRhYmxlQ2hpbGRUcmVlTm9kZUhpZXJhcmNoeSwKICAgICAgICAgY29sdW1uczog WyduYW1lJywgJ2Rlc2NyaXB0aW9uJ10KICAgICAgIH0pOwogICB9OwogCiAgIGlmICghcGdCcm93 c2VyLk5vZGVzWyd0cmlnZ2VyJ10pIHsKLSAgICBwZ0FkbWluLkJyb3dzZXIuTm9kZXNbJ3RyaWdn ZXInXSA9IHBnQWRtaW4uQnJvd3Nlci5Ob2RlLmV4dGVuZCh7Ci0gICAgICBwYXJlbnRfdHlwZTog Wyd0YWJsZScsICd2aWV3J10sCisgICAgcGdBZG1pbi5Ccm93c2VyLk5vZGVzWyd0cmlnZ2VyJ10g PSBwZ0Jyb3dzZXIuTm9kZS5leHRlbmQoeworICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6IHBn QnJvd3Nlci50YWJsZUNoaWxkVHJlZU5vZGVIaWVyYXJjaHksCisgICAgICBwYXJlbnRfdHlwZTog Wyd0YWJsZScsICd2aWV3JywgJ3BhcnRpdGlvbiddLAogICAgICAgY29sbGVjdGlvbl90eXBlOiBb J2NvbGwtdGFibGUnLCAnY29sbC12aWV3J10sCiAgICAgICB0eXBlOiAndHJpZ2dlcicsCiAgICAg ICBsYWJlbDogZ2V0dGV4dCgnVHJpZ2dlcicpLApAQCAtNzIsNiArNzQsMTIgQEAgZGVmaW5lKCdw Z2FkbWluLm5vZGUudHJpZ2dlcicsIFsKICAgICAgICAgICBpY29uOiAnd2NUYWJJY29uIGljb24t dHJpZ2dlcicsIGRhdGE6IHthY3Rpb246ICdjcmVhdGUnLCBjaGVjazogdHJ1ZX0sCiAgICAgICAg ICAgZW5hYmxlOiAnY2FuQ3JlYXRlJwogICAgICAgICB9LHsKKyAgICAgICAgICBuYW1lOiAnY3Jl YXRlX3RyaWdnZXJfb25QYXJ0aXRpb24nLCBub2RlOiAncGFydGl0aW9uJywgbW9kdWxlOiB0aGlz LAorICAgICAgICAgIGFwcGxpZXM6IFsnb2JqZWN0JywgJ2NvbnRleHQnXSwgY2FsbGJhY2s6ICdz aG93X29ial9wcm9wZXJ0aWVzJywKKyAgICAgICAgICBjYXRlZ29yeTogJ2NyZWF0ZScsIHByaW9y aXR5OiA0LCBsYWJlbDogZ2V0dGV4dCgnVHJpZ2dlci4uLicpLAorICAgICAgICAgIGljb246ICd3 Y1RhYkljb24gaWNvbi10cmlnZ2VyJywgZGF0YToge2FjdGlvbjogJ2NyZWF0ZScsIGNoZWNrOiB0 cnVlfSwKKyAgICAgICAgICBlbmFibGU6ICdjYW5DcmVhdGUnCisgICAgICAgIH0sewogICAgICAg ICAgIG5hbWU6ICdlbmFibGVfdHJpZ2dlcicsIG5vZGU6ICd0cmlnZ2VyJywgbW9kdWxlOiB0aGlz LAogICAgICAgICAgIGFwcGxpZXM6IFsnb2JqZWN0JywgJ2NvbnRleHQnXSwgY2FsbGJhY2s6ICdl bmFibGVfdHJpZ2dlcicsCiAgICAgICAgICAgY2F0ZWdvcnk6ICdjb25uZWN0JywgcHJpb3JpdHk6 IDMsIGxhYmVsOiBnZXR0ZXh0KCdFbmFibGUgdHJpZ2dlcicpLApAQCAtMjA2LDYgKzIxNCwxNyBA QCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS50cmlnZ2VyJywgWwogICAgICAgICAgIG1vZGU6IFsnY3Jl YXRlJywnZWRpdCcsICdwcm9wZXJ0aWVzJ10sCiAgICAgICAgICAgZGVwczogWydpc19jb25zdHJh aW50X3RyaWdnZXInXSwKICAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24obSkgeworICAgICAg ICAgICAgLy8gRGlzYWJsZWQgaWYgdGFibGUgaXMgYSBwYXJ0aXRpb25lZCB0YWJsZS4KKyAgICAg ICAgICAgIGlmIChfLmhhcyhtLCAnbm9kZV9pbmZvJykgJiYgXy5oYXMobS5ub2RlX2luZm8sICd0 YWJsZScpICYmCisgICAgICAgICAgICAgICAgXy5oYXMobS5ub2RlX2luZm8udGFibGUsICdpc19w YXJ0aXRpb25lZCcpICYmIG0ubm9kZV9pbmZvLnRhYmxlLmlzX3BhcnRpdGlvbmVkKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CisgICAgICAgICAg ICAgICAgICBtLnNldCgnaXNfcm93X3RyaWdnZXInLCBmYWxzZSk7CisgICAgICAgICAgICAgIH0s MTApOworCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCiAgICAg ICAgICAgICAvLyBJZiBjb25zdHJhaW50IHRyaWdnZXIgaXMgc2V0IHRvIFRydWUgdGhlbiByb3cg dHJpZ2dlciB3aWxsCiAgICAgICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IHNldCB0byBUcnVlIGFu ZCBiZWNvbWVzIGRpc2FibGUKICAgICAgICAgICAgIHZhciBpc19jb25zdHJhaW50X3RyaWdnZXIg PSBtLmdldCgnaXNfY29uc3RyYWludF90cmlnZ2VyJyk7CkBAIC0yMzIsNyArMjUxLDE5IEBAIGRl ZmluZSgncGdhZG1pbi5ub2RlLnRyaWdnZXInLCBbCiAgICAgICAgICAgaWQ6ICdpc19jb25zdHJh aW50X3RyaWdnZXInLCBsYWJlbDogZ2V0dGV4dCgnQ29uc3RyYWludCB0cmlnZ2VyPycpLAogICAg ICAgICAgIHR5cGU6ICdzd2l0Y2gnLCBkaXNhYmxlZDogJ2luU2NoZW1hV2l0aE1vZGVsQ2hlY2sn LAogICAgICAgICAgIG1vZGU6IFsnY3JlYXRlJywnZWRpdCcsICdwcm9wZXJ0aWVzJ10sCi0gICAg ICAgICAgZ3JvdXA6IGdldHRleHQoJ0RlZmluaXRpb24nKQorICAgICAgICAgIGdyb3VwOiBnZXR0 ZXh0KCdEZWZpbml0aW9uJyksCisgICAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKG0pIHsKKyAg ICAgICAgICAgIC8vIERpc2FibGVkIGlmIHRhYmxlIGlzIGEgcGFydGl0aW9uZWQgdGFibGUuCisg ICAgICAgICAgICBpZiAoXy5oYXMobSwgJ25vZGVfaW5mbycpICYmIF8uaGFzKG0ubm9kZV9pbmZv LCAndGFibGUnKSAmJgorICAgICAgICAgICAgICAgIF8uaGFzKG0ubm9kZV9pbmZvLnRhYmxlLCAn aXNfcGFydGl0aW9uZWQnKSAmJiBtLm5vZGVfaW5mby50YWJsZS5pc19wYXJ0aXRpb25lZCkKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeworICAgICAg ICAgICAgICAgICAgbS5zZXQoJ2lzX2NvbnN0cmFpbnRfdHJpZ2dlcicsIGZhbHNlKTsKKyAgICAg ICAgICAgICAgfSwxMCk7CisKKyAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg ICB9CisgICAgICAgICAgfQogICAgICAgICB9LHsKICAgICAgICAgICBpZDogJ3RnZGVmZXJyYWJs ZScsIGxhYmVsOiBnZXR0ZXh0KCdEZWZlcnJhYmxlPycpLAogICAgICAgICAgIHR5cGU6ICdzd2l0 Y2gnLCBncm91cDogZ2V0dGV4dCgnRGVmaW5pdGlvbicpLApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVz L3V0aWxzLnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvdGFibGVzL3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjlhOTNkNzUKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdXRpbHMucHkK QEAgLTAsMCArMSwyMTc4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQgLSBQ b3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTcsIFRoZSBwZ0Fk bWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0 aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisiIiIgSW1wbGVt ZW50cyBVdGlsaXR5IGNsYXNzIGZvciBUYWJsZSBhbmQgUGFydGl0aW9uZWQgVGFibGUuICIiIgor CitpbXBvcnQgcmUKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworaW1wb3J0IHNpbXBsZWpz b24gYXMganNvbgorZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRlLCBqc29uaWZ5LCBy ZXF1ZXN0Citmcm9tIGZsYXNrX2JhYmVsIGltcG9ydCBnZXR0ZXh0Citmcm9tIHBnYWRtaW4udXRp bHMuYWpheCBpbXBvcnQgbWFrZV9qc29uX3Jlc3BvbnNlLCBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3Is IFwKKyAgICBtYWtlX3Jlc3BvbnNlIGFzIGFqYXhfcmVzcG9uc2UKK2Zyb20gcGdhZG1pbi5icm93 c2VyLnNlcnZlcl9ncm91cHMuc2VydmVycy5kYXRhYmFzZXMuc2NoZW1hcy51dGlscyBcCisgICAg aW1wb3J0IERhdGFUeXBlUmVhZGVyLCB0cmlnZ2VyX2RlZmluaXRpb24sIHBhcnNlX3J1bGVfZGVm aW5pdGlvbgorZnJvbSBwZ2FkbWluLmJyb3dzZXIuc2VydmVyX2dyb3Vwcy5zZXJ2ZXJzLnV0aWxz IGltcG9ydCBwYXJzZV9wcml2X2Zyb21fZGIsIFwKKyAgICBwYXJzZV9wcml2X3RvX2RiCitmcm9t IHBnYWRtaW4uYnJvd3Nlci51dGlscyBpbXBvcnQgUEdDaGlsZE5vZGVWaWV3Citmcm9tIHBnYWRt aW4udXRpbHMgaW1wb3J0IElTX1BZMgorZnJvbSBwZ2FkbWluLnV0aWxzLmRyaXZlciBpbXBvcnQg Z2V0X2RyaXZlcgorZnJvbSBjb25maWcgaW1wb3J0IFBHX0RFRkFVTFRfRFJJVkVSCisKKworY2xh c3MgQmFzZVRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcpOgorICAgICIiIgorICAgIFRoaXMgY2xh c3MgaXMgYmFzZSBjbGFzcyBmb3IgdGFibGVzIGFuZCBwYXJ0aXRpb25lZCB0YWJsZXMuCisKKyAg ICBNZXRob2RzOgorICAgIC0tLS0tLS0KKyAgICAqIGNoZWNrX3ByZWNvbmRpdGlvbigpCisgICAg ICAtIFRoaXMgZnVuY3Rpb24gd2lsbCBiZWhhdmUgYXMgYSBkZWNvcmF0b3Igd2hpY2ggd2lsbCBj aGVja3MKKyAgICAgICAgZGF0YWJhc2UgY29ubmVjdGlvbiBiZWZvcmUgcnVubmluZyB2aWV3LCBp dCB3aWxsIGFsc28gYXR0YWNoZXMKKyAgICAgICAgbWFuYWdlcixjb25uICYgdGVtcGxhdGVfcGF0 aCBwcm9wZXJ0aWVzIHRvIHNlbGYKKworICAgICogX2Zvcm1hdHRlcihkYXRhLCB0aWQpCisgICAg ICAtIEl0IHdpbGwgcmV0dXJuIGZvcm1hdHRlZCBvdXRwdXQgb2YgcXVlcnkgcmVzdWx0CisgICAg ICAgIGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0CisKKyAgICAqIF9jb2x1bW5zX2Zvcm1hdHRl cih0aWQsIGRhdGEpOgorICAgICAgLSBJdCB3aWxsIHJldHVybiBmb3JtYXR0ZWQgb3V0cHV0IG9m IHF1ZXJ5IHJlc3VsdAorICAgICAgICBhcyBwZXIgY2xpZW50IG1vZGVsIGZvcm1hdCBmb3IgY29s dW1uIG5vZGUKKworICAgICogX2luZGV4X2NvbnN0cmFpbnRzX2Zvcm1hdHRlcihzZWxmLCBkaWQs IHRpZCwgZGF0YSk6CisgICAgICAtIEl0IHdpbGwgcmV0dXJuIGZvcm1hdHRlZCBvdXRwdXQgb2Yg cXVlcnkgcmVzdWx0CisgICAgICAgIGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0IGZvciBpbmRl eCBjb25zdHJhaW50IG5vZGUKKworICAgICogX2NsdHlwZV9mb3JtYXR0ZXIodHlwZSk6IChzdGF0 aWNtZXRob2QpCisgICAgICAtIFdlIG5lZWQgdG8gcmVtb3ZlIFtdIGZyb20gdHlwZSBhbmQgYXBw ZW5kIGl0CisgICAgICAgIGFmdGVyIGxlbmd0aC9wcmVjaXNpb24gc28gd2Ugd2lsbCBzZW5kIGZs YWcgZm9yCisgICAgICAgIHNxbCB0ZW1wbGF0ZS4KKworICAgICogZ2V0X3RhYmxlX2RlcGVuZGVu dHMoc2VsZiwgdGlkKToKKyAgICAgIC0gVGhpcyBmdW5jdGlvbiBnZXQgdGhlIGRlcGVuZGVudHMg YW5kIHJldHVybiBhamF4IHJlc3BvbnNlCisgICAgICAgIGZvciB0aGUgdGFibGUgbm9kZS4KKwor ICAgICogZ2V0X3RhYmxlX2RlcGVuZGVuY2llcyhzZWxmLCB0aWQpOgorICAgICAgLSBUaGlzIGZ1 bmN0aW9uIGdldCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZXR1cm4gYWpheCByZXNwb25zZQorICAg ICAgICBmb3IgdGhlIHRhYmxlIG5vZGUuCisKKyAgICAqIGdldF90YWJsZV9zdGF0aXN0aWNzKHNl bGYsIHRpZCk6CisgICAgICAtIFJldHVybnMgdGhlIHN0YXRpc3RpY3MgZm9yIGEgcGFydGljdWxh ciB0YWJsZSBpZiB0aWQgaXMgc3BlY2lmaWVkLAorICAgICAgICBvdGhlcndpc2UgaXQgd2lsbCBy ZXR1cm4gc3RhdGlzdGljcyBmb3IgYWxsIHRoZSB0YWJsZXMgaW4gdGhhdAorICAgICAgICBzY2hl bWEuCisgICAgKiBnZXRfcmV2ZXJzZV9lbmdpbmVlcmVkX3NxbChzZWxmLCBkaWQsIHNjaWQsIHRp ZCwgbWFpbl9zcWwsIGRhdGEpOgorICAgICAgLSBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlcyBy ZXZlcnNlIGVuZ2luZWVyZWQgc3FsIGZvcgorICAgICAgICB0aGUgdGFibGUgb2JqZWN0LgorCisg ICAgKiByZXNldF9zdGF0aXN0aWNzKHNlbGYsIHNjaWQsIHRpZCk6CisgICAgICAtIFRoaXMgZnVu Y3Rpb24gd2lsbCByZXNldCBzdGF0aXN0aWNzIG9mIHRhYmxlLgorICAgICIiIgorICAgIEBzdGF0 aWNtZXRob2QKKyAgICBkZWYgY2hlY2tfcHJlY29uZGl0aW9uKGYpOgorICAgICAgICAiIiIKKyAg ICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlaGF2ZSBhcyBhIGRlY29yYXRvciB3aGljaCB3aWxs IGNoZWNrcworICAgICAgICBkYXRhYmFzZSBjb25uZWN0aW9uIGJlZm9yZSBydW5uaW5nIHZpZXcs IGl0IHdpbGwgYWxzbyBhdHRhY2hlcworICAgICAgICBtYW5hZ2VyLGNvbm4gJiB0ZW1wbGF0ZV9w YXRoIHByb3BlcnRpZXMgdG8gc2VsZgorICAgICAgICAiIiIKKworICAgICAgICBAd3JhcHMoZikK KyAgICAgICAgZGVmIHdyYXAoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICMgSGVyZSBh cmdzWzBdIHdpbGwgaG9sZCBzZWxmICYga3dhcmdzIHdpbGwgaG9sZCBnaWQsc2lkLGRpZAorICAg ICAgICAgICAgc2VsZiA9IGFyZ3NbMF0KKyAgICAgICAgICAgIGRyaXZlciA9IGdldF9kcml2ZXIo UEdfREVGQVVMVF9EUklWRVIpCisgICAgICAgICAgICBkaWQgPSBrd2FyZ3NbJ2RpZCddCisgICAg ICAgICAgICBzZWxmLm1hbmFnZXIgPSBkcml2ZXIuY29ubmVjdGlvbl9tYW5hZ2VyKGt3YXJnc1sn c2lkJ10pCisgICAgICAgICAgICBzZWxmLmNvbm4gPSBzZWxmLm1hbmFnZXIuY29ubmVjdGlvbihk aWQ9a3dhcmdzWydkaWQnXSkKKyAgICAgICAgICAgIHNlbGYucXRJZGVudCA9IGRyaXZlci5xdElk ZW50CisgICAgICAgICAgICBzZWxmLnF0VHlwZUlkZW50ID0gZHJpdmVyLnF0VHlwZUlkZW50Cisg ICAgICAgICAgICAjIFdlIG5lZWQgZGF0bGFzdHN5c29pZCB0byBjaGVjayBpZiBjdXJyZW50IHRh YmxlIGlzIHN5c3RlbSB0YWJsZQorICAgICAgICAgICAgc2VsZi5kYXRsYXN0c3lzb2lkID0gc2Vs Zi5tYW5hZ2VyLmRiX2luZm9bCisgICAgICAgICAgICAgICAgZGlkCisgICAgICAgICAgICBdWydk YXRsYXN0c3lzb2lkJ10gaWYgc2VsZi5tYW5hZ2VyLmRiX2luZm8gaXMgbm90IE5vbmUgYW5kIFwK KyAgICAgICAgICAgICAgICBkaWQgaW4gc2VsZi5tYW5hZ2VyLmRiX2luZm8gZWxzZSAwCisKKyAg ICAgICAgICAgIHZlciA9IHNlbGYubWFuYWdlci52ZXJzaW9uCisgICAgICAgICAgICAjIFNldCB0 aGUgdGVtcGxhdGUgcGF0aCBmb3IgdGhlIFNRTCBzY3JpcHRzCisgICAgICAgICAgICBzZWxmLnRh YmxlX3RlbXBsYXRlX3BhdGggPSAndGFibGUvc3FsLyN7MH0jJy5mb3JtYXQodmVyKQorICAgICAg ICAgICAgc2VsZi5wYXJ0aXRpb25fdGVtcGxhdGVfcGF0aCA9ICdwYXJ0aXRpb24vc3FsLyN7MH0j Jy5mb3JtYXQodmVyKQorCisgICAgICAgICAgICAjIFRlbXBsYXRlIGZvciBDb2x1bW4gLGNoZWNr IGNvbnN0cmFpbnQgYW5kIGV4Y2x1c2lvbgorICAgICAgICAgICAgIyBjb25zdHJhaW50IG5vZGUK KyAgICAgICAgICAgIHNlbGYuY29sdW1uX3RlbXBsYXRlX3BhdGggPSAnY29sdW1uL3NxbC8jezB9 IycuZm9ybWF0KHZlcikKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY29uc3RyYWludF90ZW1wbGF0 ZV9wYXRoID0gXAorICAgICAgICAgICAgICAgICdjaGVja19jb25zdHJhaW50L3NxbC8jezB9Iycu Zm9ybWF0KHZlcikKKyAgICAgICAgICAgIHNlbGYuZXhjbHVzaW9uX2NvbnN0cmFpbnRfdGVtcGxh dGVfcGF0aCA9IFwKKyAgICAgICAgICAgICAgICAnZXhjbHVzaW9uX2NvbnN0cmFpbnQvc3FsLyN7 MH0jJy5mb3JtYXQodmVyKQorCisgICAgICAgICAgICAjIFRlbXBsYXRlIGZvciBQSyAmIFVuaXF1 ZSBjb25zdHJhaW50IG5vZGUKKyAgICAgICAgICAgIHNlbGYuaW5kZXhfY29uc3RyYWludF90ZW1w bGF0ZV9wYXRoID0gJ2luZGV4X2NvbnN0cmFpbnQvc3FsJworCisgICAgICAgICAgICAjIFRlbXBs YXRlIGZvciBmb3JlaWduIGtleSBjb25zdHJhaW50IG5vZGUKKyAgICAgICAgICAgIHNlbGYuZm9y ZWlnbl9rZXlfdGVtcGxhdGVfcGF0aCA9ICdmb3JlaWduX2tleS9zcWwvI3swfSMnLmZvcm1hdCh2 ZXIpCisKKyAgICAgICAgICAgICMgVGVtcGxhdGUgZm9yIGluZGV4IG5vZGUKKyAgICAgICAgICAg IHNlbGYuaW5kZXhfdGVtcGxhdGVfcGF0aCA9ICdpbmRleC9zcWwvI3swfSMnLmZvcm1hdCh2ZXIp CisKKyAgICAgICAgICAgICMgVGVtcGxhdGUgZm9yIHRyaWdnZXIgbm9kZQorICAgICAgICAgICAg c2VsZi50cmlnZ2VyX3RlbXBsYXRlX3BhdGggPSAndHJpZ2dlci9zcWwvI3swfSMnLmZvcm1hdCh2 ZXIpCisKKyAgICAgICAgICAgICMgVGVtcGxhdGUgZm9yIHJ1bGVzIG5vZGUKKyAgICAgICAgICAg IHNlbGYucnVsZXNfdGVtcGxhdGVfcGF0aCA9ICdydWxlcy9zcWwnCisKKyAgICAgICAgICAgICMg U3VwcG9ydGVkIEFDTCBmb3IgdGFibGUKKyAgICAgICAgICAgIHNlbGYuYWNsID0gWydhJywgJ3In LCAndycsICdkJywgJ0QnLCAneCcsICd0J10KKworICAgICAgICAgICAgIyBTdXBwb3J0ZWQgQUNM IGZvciBjb2x1bW5zCisgICAgICAgICAgICBzZWxmLmNvbHVtbl9hY2wgPSBbJ2EnLCAncicsICd3 JywgJ3gnXQorCisgICAgICAgICAgICByZXR1cm4gZigqYXJncywgKiprd2FyZ3MpCisKKyAgICAg ICAgcmV0dXJuIHdyYXAKKworICAgIGRlZiBfY29sdW1uc19mb3JtYXR0ZXIoc2VsZiwgdGlkLCBk YXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB0aWQ6IFRhYmxl IE9JRAorICAgICAgICAgICAgZGF0YTogZGljdCBvZiBxdWVyeSByZXN1bHQKKworICAgICAgICBS ZXR1cm5zOgorICAgICAgICAgICAgSXQgd2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBvZiBx dWVyeSByZXN1bHQKKyAgICAgICAgICAgIGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0IGZvciBj b2x1bW4gbm9kZQorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGNvbHVtbiBpbiBkYXRhWydjb2x1 bW5zJ106CisKKyAgICAgICAgICAgICMgV2UgbmVlZCB0byBmb3JtYXQgdmFyaWFibGVzIGFjY29y ZGluZyB0byBjbGllbnQganMgY29sbGVjdGlvbgorICAgICAgICAgICAgaWYgJ2F0dG9wdGlvbnMn IGluIGNvbHVtbiBhbmQgY29sdW1uWydhdHRvcHRpb25zJ10gaXMgbm90IE5vbmU6CisgICAgICAg ICAgICAgICAgc3Bjb3B0aW9ucyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHNwY29wdGlvbiBp biBjb2x1bW5bJ2F0dG9wdGlvbnMnXToKKyAgICAgICAgICAgICAgICAgICAgaywgdiA9IHNwY29w dGlvbi5zcGxpdCgnPScpCisgICAgICAgICAgICAgICAgICAgIHNwY29wdGlvbnMuYXBwZW5kKHsn bmFtZSc6IGssICd2YWx1ZSc6IHZ9KQorCisgICAgICAgICAgICAgICAgY29sdW1uWydhdHRvcHRp b25zJ10gPSBzcGNvcHRpb25zCisKKyAgICAgICAgICAgICMgTmVlZCB0byBmb3JtYXQgc2VjdXJp dHkgbGFiZWxzIGFjY29yZGluZyB0byBjbGllbnQganMgY29sbGVjdGlvbgorICAgICAgICAgICAg aWYgJ3NlY2xhYmVscycgaW4gY29sdW1uIGFuZCBjb2x1bW5bJ3NlY2xhYmVscyddIGlzIG5vdCBO b25lOgorICAgICAgICAgICAgICAgIHNlY2xhYmVscyA9IFtdCisgICAgICAgICAgICAgICAgZm9y IHNlY2xibHMgaW4gY29sdW1uWydzZWNsYWJlbHMnXToKKyAgICAgICAgICAgICAgICAgICAgaywg diA9IHNlY2xibHMuc3BsaXQoJz0nKQorICAgICAgICAgICAgICAgICAgICBzZWNsYWJlbHMuYXBw ZW5kKHsncHJvdmlkZXInOiBrLCAnbGFiZWwnOiB2fSkKKworICAgICAgICAgICAgICAgIGNvbHVt blsnc2VjbGFiZWxzJ10gPSBzZWNsYWJlbHMKKworICAgICAgICAgICAgaWYgJ2F0dG51bScgaW4g Y29sdW1uIGFuZCBjb2x1bW5bJ2F0dG51bSddIGlzIG5vdCBOb25lIFwKKyAgICAgICAgICAgICAg ICAgICAgYW5kIGNvbHVtblsnYXR0bnVtJ10gPiAwOgorICAgICAgICAgICAgICAgICMgV2UgbmVl ZCB0byBwYXJzZSAmIGNvbnZlcnQgQUNMIGNvbWluZyBmcm9tIGRhdGFiYXNlIHRvCisgICAgICAg ICAgICAgICAgIyBqc29uIGZvcm1hdAorICAgICAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1w bGF0ZSgiLyIuam9pbigKKyAgICAgICAgICAgICAgICAgICAgW3NlbGYuY29sdW1uX3RlbXBsYXRl X3BhdGgsICdhY2wuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkLCBjbGlkPWNv bHVtblsnYXR0bnVtJ10KKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgc3RhdHVz LCBhY2wgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKworICAgICAgICAgICAgICAgIGlm IG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9YWNsKQorCisgICAgICAgICAgICAgICAgIyBXZSB3aWxsIHNldCBnZXQg cHJpdmlsZWdlcyBmcm9tIGFjbCBzcWwgc28gd2UgZG9uJ3QgbmVlZAorICAgICAgICAgICAgICAg ICMgaXQgZnJvbSBwcm9wZXJ0aWVzIHNxbAorICAgICAgICAgICAgICAgIGNvbHVtblsnYXR0YWNs J10gPSBbXQorCisgICAgICAgICAgICAgICAgZm9yIHJvdyBpbiBhY2xbJ3Jvd3MnXToKKyAgICAg ICAgICAgICAgICAgICAgcHJpdiA9IHBhcnNlX3ByaXZfZnJvbV9kYihyb3cpCisgICAgICAgICAg ICAgICAgICAgIGNvbHVtbi5zZXRkZWZhdWx0KHJvd1snZGVmdHlwZSddLCBbXSkuYXBwZW5kKHBy aXYpCisKKyAgICAgICAgICAgICAgICAjIHdlIGFyZSByZWNlaXZpbmcgcmVxdWVzdCB3aGVuIGlu IGVkaXQgbW9kZQorICAgICAgICAgICAgICAgICMgd2Ugd2lsbCBzZW5kIGZpbHRlcmVkIHR5cGVz IHJlbGF0ZWQgdG8gY3VycmVudCB0eXBlCisgICAgICAgICAgICAgICAgcHJlc2VudF90eXBlID0g Y29sdW1uWydjbHR5cGUnXQorCisgICAgICAgICAgICAgICAgdHlwZV9pZCA9IGNvbHVtblsnYXR0 dHlwaWQnXQorCisgICAgICAgICAgICAgICAgZnVsbHR5cGUgPSBzZWxmLmdldF9mdWxsX3R5cGUo CisgICAgICAgICAgICAgICAgICAgIGNvbHVtblsndHlwbnNwbmFtZSddLCBjb2x1bW5bJ3R5cG5h bWUnXSwKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uWydpc2R1cCddLCBjb2x1bW5bJ2F0dG5k aW1zJ10sIGNvbHVtblsnYXR0dHlwbW9kJ10KKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAg ICAgICAgICBsZW5ndGggPSBGYWxzZQorICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IEZhbHNl CisgICAgICAgICAgICAgICAgaWYgJ2VsZW1vaWQnIGluIGNvbHVtbjoKKyAgICAgICAgICAgICAg ICAgICAgbGVuZ3RoLCBwcmVjaXNpb24sIHR5cGV2YWwgPSBcCisgICAgICAgICAgICAgICAgICAg ICAgICBzZWxmLmdldF9sZW5ndGhfcHJlY2lzaW9uKGNvbHVtblsnZWxlbW9pZCddKQorCisgICAg ICAgICAgICAgICAgIyBTZXQgbGVuZ3RoIGFuZCBwcmVjaXNpb24gdG8gTm9uZQorICAgICAgICAg ICAgICAgIGNvbHVtblsnYXR0bGVuJ10gPSBOb25lCisgICAgICAgICAgICAgICAgY29sdW1uWydh dHRwcmVjaXNpb24nXSA9IE5vbmUKKworICAgICAgICAgICAgICAgICMgSWYgd2UgaGF2ZSBsZW5n dGggJiBwcmVjaXNpb24gYm90aAorICAgICAgICAgICAgICAgIGlmIGxlbmd0aCBhbmQgcHJlY2lz aW9uOgorICAgICAgICAgICAgICAgICAgICBtYXRjaE9iaiA9IHJlLnNlYXJjaChyJyhcZCspLChc ZCspJywgZnVsbHR5cGUpCisgICAgICAgICAgICAgICAgICAgIGlmIG1hdGNoT2JqOgorICAgICAg ICAgICAgICAgICAgICAgICAgY29sdW1uWydhdHRsZW4nXSA9IG1hdGNoT2JqLmdyb3VwKDEpCisg ICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5bJ2F0dHByZWNpc2lvbiddID0gbWF0Y2hPYmou Z3JvdXAoMikKKyAgICAgICAgICAgICAgICBlbGlmIGxlbmd0aDoKKyAgICAgICAgICAgICAgICAg ICAgIyBJZiB3ZSBoYXZlIGxlbmd0aCBvbmx5CisgICAgICAgICAgICAgICAgICAgIG1hdGNoT2Jq ID0gcmUuc2VhcmNoKHInKFxkKyknLCBmdWxsdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgaWYg bWF0Y2hPYmo6CisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5bJ2F0dGxlbiddID0gbWF0 Y2hPYmouZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblsnYXR0cHJlY2lz aW9uJ10gPSBOb25lCisKKworICAgICAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgi LyIuam9pbihbc2VsZi5jb2x1bW5fdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19yZWZlcmVuY2VkLnNxbCddKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCwgY2xpZD1jb2x1bW5bJ2F0 dG51bSddKQorCisgICAgICAgICAgICAgICAgc3RhdHVzLCBpc19yZWZlcmVuY2UgPSBzZWxmLmNv bm4uZXhlY3V0ZV9zY2FsYXIoU1FMKQorCisgICAgICAgICAgICAgICAgZWRpdF90eXBlc19saXN0 ID0gbGlzdCgpCisgICAgICAgICAgICAgICAgIyBXZSB3aWxsIG5lZWQgcHJlc2VudCB0eXBlIGlu IGVkaXQgbW9kZQorCisgICAgICAgICAgICAgICAgaWYgY29sdW1uWyd0eXBuc3BuYW1lJ10gPT0g InBnX2NhdGFsb2ciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIGNvbHVtblsndHlwbnNw bmFtZSddID09ICJwdWJsaWMiOgorICAgICAgICAgICAgICAgICAgICBlZGl0X3R5cGVzX2xpc3Qu YXBwZW5kKHByZXNlbnRfdHlwZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg ICAgICAgICB0ID0gc2VsZi5xdFR5cGVJZGVudChzZWxmLmNvbm4sIGNvbHVtblsndHlwbnNwbmFt ZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50X3R5 cGUpCisgICAgICAgICAgICAgICAgICAgIGVkaXRfdHlwZXNfbGlzdC5hcHBlbmQodCkKKyAgICAg ICAgICAgICAgICAgICAgY29sdW1uWydjbHR5cGUnXSA9IHQKKworICAgICAgICAgICAgICAgIGlm IGludChpc19yZWZlcmVuY2UpID09IDA6CisgICAgICAgICAgICAgICAgICAgIFNRTCA9IHJlbmRl cl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5jb2x1bW5fdGVtcGxhdGVfcGF0aCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWRpdF9tb2RlX3R5 cGVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5 cGVfaWQ9dHlwZV9pZCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCByc2V0ID0gc2VsZi5j b25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCisKKyAgICAgICAgICAgICAgICAgICAgZm9yIHJvdyBp biByc2V0Wydyb3dzJ106CisgICAgICAgICAgICAgICAgICAgICAgICBlZGl0X3R5cGVzX2xpc3Qu YXBwZW5kKHJvd1sndHlwbmFtZSddKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg ICAgICAgICAgIGVkaXRfdHlwZXNfbGlzdC5hcHBlbmQocHJlc2VudF90eXBlKQorCisgICAgICAg ICAgICAgICAgY29sdW1uWydlZGl0X3R5cGVzJ10gPSBlZGl0X3R5cGVzX2xpc3QKKyAgICAgICAg ICAgICAgICBjb2x1bW5bJ2NsdHlwZSddID0gRGF0YVR5cGVSZWFkZXIucGFyc2VfdHlwZV9uYW1l KGNvbHVtblsnY2x0eXBlJ10pCisKKyAgICAgICAgICAgICAgICBpZiAnaW5ka2V5JyBpbiBjb2x1 bW46CisgICAgICAgICAgICAgICAgICAgICMgQ3VycmVudCBjb2x1bW4KKyAgICAgICAgICAgICAg ICAgICAgYXR0bnVtID0gc3RyKGNvbHVtblsnYXR0bnVtJ10pCisKKyAgICAgICAgICAgICAgICAg ICAgIyBTaW5nbGUvTGlzdCBvZiBwcmltYXJ5IGtleSBjb2x1bW4ocykKKyAgICAgICAgICAgICAg ICAgICAgaW5ka2V5ID0gc3RyKGNvbHVtblsnaW5ka2V5J10pCisKKyAgICAgICAgICAgICAgICAg ICAgIyBXZSB3aWxsIGNoZWNrIGlmIGNvbHVtbiBpcyBpbiBwcmltYXJ5IGNvbHVtbihzKQorICAg ICAgICAgICAgICAgICAgICBpZiBhdHRudW0gaW4gaW5ka2V5LnNwbGl0KCIgIik6CisgICAgICAg ICAgICAgICAgICAgICAgICBjb2x1bW5bJ2lzX3ByaW1hcnlfa2V5J10gPSBUcnVlCisgICAgICAg ICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5bJ2lzX3By aW1hcnlfa2V5J10gPSBGYWxzZQorCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgX2lu ZGV4X2NvbnN0cmFpbnRzX2Zvcm1hdHRlcihzZWxmLCBkaWQsIHRpZCwgZGF0YSk6CisgICAgICAg ICIiIgorICAgICAgICBBcmdzOgorICAgICAgICAgICAgdGlkOiBUYWJsZSBPSUQKKyAgICAgICAg ICAgIGRhdGE6IGRpY3Qgb2YgcXVlcnkgcmVzdWx0CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAg ICAgICAgIEl0IHdpbGwgcmV0dXJuIGZvcm1hdHRlZCBvdXRwdXQgb2YgcXVlcnkgcmVzdWx0Cisg ICAgICAgICAgICBhcyBwZXIgY2xpZW50IG1vZGVsIGZvcm1hdCBmb3IgaW5kZXggY29uc3RyYWlu dCBub2RlCisgICAgICAgICIiIgorCisgICAgICAgICMgV2Ugd2lsbCBmZXRjaCBhbGwgdGhlIGlu ZGV4IGNvbnN0cmFpbnRzIGZvciB0aGUgdGFibGUKKyAgICAgICAgaW5kZXhfY29uc3RyYWludHMg PSB7CisgICAgICAgICAgICAncCc6ICdwcmltYXJ5X2tleScsICd1JzogJ3VuaXF1ZV9jb25zdHJh aW50JworICAgICAgICB9CisKKyAgICAgICAgZm9yIGN0eXBlIGluIGluZGV4X2NvbnN0cmFpbnRz LmtleXMoKToKKyAgICAgICAgICAgIGRhdGFbaW5kZXhfY29uc3RyYWludHNbY3R5cGVdXSA9IFtd CisKKyAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5pbmRl eF9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkaWQ9ZGlkLCB0aWQ9dGlkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0cmFpbnRfdHlwZT1jdHlwZSkKKyAgICAgICAgICAgIHN0YXR1cywgcmVz ID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCisKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0 dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1z Zz1yZXMpCisKKyAgICAgICAgICAgIGZvciByb3cgaW4gcmVzWydyb3dzJ106CisgICAgICAgICAg ICAgICAgcmVzdWx0ID0gcm93CisgICAgICAgICAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRl KAorICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5pbmRleF9jb25zdHJhaW50X3Rl bXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2NvbnN0cmFp bnRfY29scy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgIGNpZD1yb3dbJ29pZCddLAorICAg ICAgICAgICAgICAgICAgICBjb2xjbnQ9cm93WydpbmRuYXR0cyddKQorICAgICAgICAgICAgICAg IHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCisKKyAgICAgICAgICAg ICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxf c2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKworICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBb XQorICAgICAgICAgICAgICAgIGZvciByIGluIHJlc1sncm93cyddOgorICAgICAgICAgICAgICAg ICAgICBjb2x1bW5zLmFwcGVuZCh7ImNvbHVtbiI6IHJbJ2NvbHVtbiddLnN0cmlwKCciJyl9KQor CisgICAgICAgICAgICAgICAgcmVzdWx0Wydjb2x1bW5zJ10gPSBjb2x1bW5zCisKKyAgICAgICAg ICAgICAgICAjIElmIG5vdCBleGlzdHMgdGhlbiBjcmVhdGUgbGlzdCBhbmQvb3IgYXBwZW5kIGlu dG8KKyAgICAgICAgICAgICAgICAjIGV4aXN0aW5nIGxpc3QgWyBBZGRpbmcgaW50byBtYWluIGRh dGEgZGljdF0KKyAgICAgICAgICAgICAgICBkYXRhLnNldGRlZmF1bHQoaW5kZXhfY29uc3RyYWlu dHNbY3R5cGVdLCBbXSkuYXBwZW5kKHJlc3VsdCkKKworICAgICAgICByZXR1cm4gZGF0YQorCisg ICAgZGVmIF9mb3JlaWduX2tleV9mb3JtYXR0ZXIoc2VsZiwgdGlkLCBkYXRhKToKKyAgICAgICAg IiIiCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB0aWQ6IFRhYmxlIE9JRAorICAgICAgICAg ICAgZGF0YTogZGljdCBvZiBxdWVyeSByZXN1bHQKKworICAgICAgICBSZXR1cm5zOgorICAgICAg ICAgICAgSXQgd2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1bHQKKyAg ICAgICAgICAgIGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0IGZvciBmb3JlaWduIGtleSBjb25z dHJhaW50IG5vZGUKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSB3aWxsIGZldGNoIGFsbCB0 aGUgaW5kZXggY29uc3RyYWludHMgZm9yIHRoZSB0YWJsZQorICAgICAgICBzcWwgPSByZW5kZXJf dGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuZm9yZWlnbl9rZXlfdGVtcGxhdGVfcGF0aCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkKQorCisgICAgICAgIHN0YXR1cywg cmVzdWx0ID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCisKKyAgICAgICAgaWYgbm90IHN0 YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9 cmVzdWx0KQorCisgICAgICAgIGZvciBmayBpbiByZXN1bHRbJ3Jvd3MnXToKKworICAgICAgICAg ICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmZvcmVpZ25fa2V5X3RlbXBs YXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdn ZXRfY29uc3RyYWludF9jb2xzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0aWQ9dGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXM9emlw KGZrWydjb25ma2V5J10sIGZrWydjb25rZXknXSksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uZnJlbGlkPWZrWydjb25mcmVsaWQnXSkKKworICAgICAgICAgICAgc3RhdHVz LCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKKworICAgICAgICAgICAgaWYgbm90 IHN0YXR1czoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVy cm9ybXNnPXJlcykKKworICAgICAgICAgICAgY29sdW1ucyA9IFtdCisgICAgICAgICAgICBjb2xz ID0gW10KKyAgICAgICAgICAgIGZvciByb3cgaW4gcmVzWydyb3dzJ106CisgICAgICAgICAgICAg ICAgY29sdW1ucy5hcHBlbmQoeyJsb2NhbF9jb2x1bW4iOiByb3dbJ2NvbmF0dG5hbWUnXSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZXMiOiBma1snY29uZnJlbGlk J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2VkIjogcm93Wydj b25mYXR0bmFtZSddfSkKKyAgICAgICAgICAgICAgICBjb2xzLmFwcGVuZChyb3dbJ2NvbmF0dG5h bWUnXSkKKworICAgICAgICAgICAgZmtbJ2NvbHVtbnMnXSA9IGNvbHVtbnMKKworICAgICAgICAg ICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmZvcmVpZ25fa2V5X3RlbXBs YXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdn ZXRfcGFyZW50LnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9 ZmtbJ2NvbHVtbnMnXVswXVsncmVmZXJlbmNlcyddKQorCisgICAgICAgICAgICBzdGF0dXMsIHJz ZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKKyAgICAgICAgICAgIGlmIG5vdCBz dGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJv cm1zZz1yc2V0KQorCisgICAgICAgICAgICBma1sncmVtb3RlX3NjaGVtYSddID0gcnNldFsncm93 cyddWzBdWydzY2hlbWEnXQorICAgICAgICAgICAgZmtbJ3JlbW90ZV90YWJsZSddID0gcnNldFsn cm93cyddWzBdWyd0YWJsZSddCisKKyAgICAgICAgICAgIGNvdmVyaW5naW5kZXggPSBzZWxmLnNl YXJjaF9jb3ZlcmluZ2luZGV4KHRpZCwgY29scykKKworICAgICAgICAgICAgZmtbJ2NvdmVyaW5n aW5kZXgnXSA9IGNvdmVyaW5naW5kZXgKKyAgICAgICAgICAgIGlmIGNvdmVyaW5naW5kZXg6Cisg ICAgICAgICAgICAgICAgZmtbJ2F1dG9pbmRleCddID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZr WydoYXNpbmRleCddID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBm a1snYXV0b2luZGV4J10gPSBGYWxzZQorICAgICAgICAgICAgICAgIGZrWydoYXNpbmRleCddID0g RmFsc2UKKyAgICAgICAgICAgICMgSWYgbm90IGV4aXN0cyB0aGVuIGNyZWF0ZSBsaXN0IGFuZC9v ciBhcHBlbmQgaW50bworICAgICAgICAgICAgIyBleGlzdGluZyBsaXN0IFsgQWRkaW5nIGludG8g bWFpbiBkYXRhIGRpY3RdCisgICAgICAgICAgICBkYXRhLnNldGRlZmF1bHQoJ2ZvcmVpZ25fa2V5 JywgW10pLmFwcGVuZChmaykKKworICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIF9jaGVj a19jb25zdHJhaW50X2Zvcm1hdHRlcihzZWxmLCB0aWQsIGRhdGEpOgorICAgICAgICAiIiIKKyAg ICAgICAgQXJnczoKKyAgICAgICAgICAgIHRpZDogVGFibGUgT0lECisgICAgICAgICAgICBkYXRh OiBkaWN0IG9mIHF1ZXJ5IHJlc3VsdAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBJ dCB3aWxsIHJldHVybiBmb3JtYXR0ZWQgb3V0cHV0IG9mIHF1ZXJ5IHJlc3VsdAorICAgICAgICAg ICAgYXMgcGVyIGNsaWVudCBtb2RlbCBmb3JtYXQgZm9yIGNoZWNrIGNvbnN0cmFpbnQgbm9kZQor ICAgICAgICAiIiIKKworICAgICAgICAjIFdlIHdpbGwgZmV0Y2ggYWxsIHRoZSBpbmRleCBjb25z dHJhaW50cyBmb3IgdGhlIHRhYmxlCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIu am9pbihbc2VsZi5jaGVja19jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCkKKworICAgICAgICBzdGF0dXMsIHJlcyA9IHNl bGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQorCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAg ICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKyAgICAg ICAgIyBJZiBub3QgZXhpc3RzIHRoZW4gY3JlYXRlIGxpc3QgYW5kL29yIGFwcGVuZCBpbnRvCisg ICAgICAgICMgZXhpc3RpbmcgbGlzdCBbIEFkZGluZyBpbnRvIG1haW4gZGF0YSBkaWN0XQorCisg ICAgICAgIGRhdGFbJ2NoZWNrX2NvbnN0cmFpbnQnXSA9IHJlc1sncm93cyddCisKKyAgICAgICAg cmV0dXJuIGRhdGEKKworICAgIGRlZiBfZXhjbHVzaW9uX2NvbnN0cmFpbnRfZm9ybWF0dGVyKHNl bGYsIGRpZCwgdGlkLCBkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIEFyZ3M6CisgICAgICAg ICAgICB0aWQ6IFRhYmxlIE9JRAorICAgICAgICAgICAgZGF0YTogZGljdCBvZiBxdWVyeSByZXN1 bHQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgSXQgd2lsbCByZXR1cm4gZm9ybWF0 dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1bHQKKyAgICAgICAgICAgIGFzIHBlciBjbGllbnQgbW9k ZWwgZm9ybWF0IGZvciBleGNsdXNpb24gY29uc3RyYWludCBub2RlCisgICAgICAgICIiIgorCisg ICAgICAgICMgV2Ugd2lsbCBmZXRjaCBhbGwgdGhlIGluZGV4IGNvbnN0cmFpbnRzIGZvciB0aGUg dGFibGUKKyAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmV4Y2x1 c2lvbl9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGlkPWRpZCwgdGlkPXRpZCkKKworICAgICAgICBzdGF0dXMsIHJlc3VsdCA9IHNl bGYuY29ubi5leGVjdXRlX2RpY3Qoc3FsKQorCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAg ICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlc3VsdCkKKwor ICAgICAgICBmb3IgZXggaW4gcmVzdWx0Wydyb3dzJ106CisKKyAgICAgICAgICAgIHNxbCA9IHJl bmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKKyAgICAgICAgICAgICAgICBbc2VsZi5leGNsdXNpb25f Y29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAnZ2V0X2NvbnN0cmFp bnRfY29scy5zcWwnXSksCisgICAgICAgICAgICAgICAgY2lkPWV4WydvaWQnXSwKKyAgICAgICAg ICAgICAgICBjb2xjbnQ9ZXhbJ2luZG5hdHRzJ10pCisKKyAgICAgICAgICAgIHN0YXR1cywgcmVz ID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCisKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0 dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1z Zz1yZXMpCisKKyAgICAgICAgICAgIGNvbHVtbnMgPSBbXQorICAgICAgICAgICAgZm9yIHJvdyBp biByZXNbJ3Jvd3MnXToKKyAgICAgICAgICAgICAgICBpZiByb3dbJ29wdGlvbnMnXSAmIDE6Cisg ICAgICAgICAgICAgICAgICAgIG9yZGVyID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgbnVs bHNfb3JkZXIgPSBUcnVlIGlmIChyb3dbJ29wdGlvbnMnXSAmIDIpIGVsc2UgRmFsc2UKKyAgICAg ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvcmRlciA9IFRydWUKKyAgICAg ICAgICAgICAgICAgICAgbnVsbHNfb3JkZXIgPSBUcnVlIGlmIChyb3dbJ29wdGlvbnMnXSAmIDIp IGVsc2UgRmFsc2UKKworICAgICAgICAgICAgICAgIGNvbHVtbnMuYXBwZW5kKHsiY29sdW1uIjog cm93Wydjb2xkZWYnXS5zdHJpcCgnIicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAib3Blcl9jbGFzcyI6IHJvd1snb3BjbmFtZSddLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAib3JkZXIiOiBvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Im51bGxzX29yZGVyIjogbnVsbHNfb3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJvcGVyYXRvciI6IHJvd1snb3BybmFtZSddLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiY29sX3R5cGUiOiByb3dbJ2RhdGF0eXBlJ10KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfSkKKworICAgICAgICAgICAgZXhbJ2NvbHVtbnMnXSA9IGNvbHVtbnMKKyAg ICAgICAgICAgICMgSWYgbm90IGV4aXN0cyB0aGVuIGNyZWF0ZSBsaXN0IGFuZC9vciBhcHBlbmQg aW50bworICAgICAgICAgICAgIyBleGlzdGluZyBsaXN0IFsgQWRkaW5nIGludG8gbWFpbiBkYXRh IGRpY3RdCisgICAgICAgICAgICBkYXRhLnNldGRlZmF1bHQoJ2V4Y2x1ZGVfY29uc3RyYWludCcs IFtdKS5hcHBlbmQoZXgpCisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBfZm9ybWF0 dGVyKHNlbGYsIGRpZCwgc2NpZCwgdGlkLCBkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIEFy Z3M6CisgICAgICAgICAgICBkYXRhOiBkaWN0IG9mIHF1ZXJ5IHJlc3VsdAorICAgICAgICAgICAg c2NpZDogc2NoZW1hIG9pZAorICAgICAgICAgICAgdGlkOiB0YWJsZSBvaWQKKworICAgICAgICBS ZXR1cm5zOgorICAgICAgICAgICAgSXQgd2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBvZiBx dWVyeSByZXN1bHQKKyAgICAgICAgICAgIGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0CisgICAg ICAgICIiIgorICAgICAgICAjIE5lZWQgdG8gZm9ybWF0IHNlY3VyaXR5IGxhYmVscyBhY2NvcmRp bmcgdG8gY2xpZW50IGpzIGNvbGxlY3Rpb24KKyAgICAgICAgaWYgJ3NlY2xhYmVscycgaW4gZGF0 YSBhbmQgZGF0YVsnc2VjbGFiZWxzJ10gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWNsYWJl bHMgPSBbXQorICAgICAgICAgICAgZm9yIHNlY2xibHMgaW4gZGF0YVsnc2VjbGFiZWxzJ106Cisg ICAgICAgICAgICAgICAgaywgdiA9IHNlY2xibHMuc3BsaXQoJz0nKQorICAgICAgICAgICAgICAg IHNlY2xhYmVscy5hcHBlbmQoeydwcm92aWRlcic6IGssICdsYWJlbCc6IHZ9KQorCisgICAgICAg ICAgICBkYXRhWydzZWNsYWJlbHMnXSA9IHNlY2xhYmVscworCisgICAgICAgICMgV2UgbmVlZCB0 byBwYXJzZSAmIGNvbnZlcnQgQUNMIGNvbWluZyBmcm9tIGRhdGFiYXNlIHRvIGpzb24gZm9ybWF0 CisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJsZV90ZW1w bGF0ZV9wYXRoLCAnYWNsLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRp ZD10aWQsIHNjaWQ9c2NpZCkKKyAgICAgICAgc3RhdHVzLCBhY2wgPSBzZWxmLmNvbm4uZXhlY3V0 ZV9kaWN0KFNRTCkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBp bnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9YWNsKQorCisgICAgICAgICMgV2Ugd2lsbCBz ZXQgZ2V0IHByaXZpbGVnZXMgZnJvbSBhY2wgc3FsIHNvIHdlIGRvbid0IG5lZWQKKyAgICAgICAg IyBpdCBmcm9tIHByb3BlcnRpZXMgc3FsCisgICAgICAgIGZvciByb3cgaW4gYWNsWydyb3dzJ106 CisgICAgICAgICAgICBwcml2ID0gcGFyc2VfcHJpdl9mcm9tX2RiKHJvdykKKyAgICAgICAgICAg IGlmIHJvd1snZGVmdHlwZSddIGluIGRhdGE6CisgICAgICAgICAgICAgICAgZGF0YVtyb3dbJ2Rl ZnR5cGUnXV0uYXBwZW5kKHByaXYpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg IGRhdGFbcm93WydkZWZ0eXBlJ11dID0gW3ByaXZdCisKKyAgICAgICAgIyBXZSB3aWxsIGFkZCBB dXRvIHZhY3V1bSBkZWZhdWx0cyB3aXRoIG91dCByZXN1bHQgZm9yIGdyaWQKKyAgICAgICAgZGF0 YVsndmFjdXVtX3RhYmxlJ10gPSBzZWxmLnBhcnNlX3ZhY3V1bV9kYXRhKHNlbGYuY29ubiwgZGF0 YSwgJ3RhYmxlJykKKyAgICAgICAgZGF0YVsndmFjdXVtX3RvYXN0J10gPSBzZWxmLnBhcnNlX3Zh Y3V1bV9kYXRhKHNlbGYuY29ubiwgZGF0YSwgJ3RvYXN0JykKKworICAgICAgICAjIEZldGNoIGNv bHVtbnMgZm9yIHRoZSB0YWJsZSBsb2dpYworICAgICAgICAjCisgICAgICAgICMgMSkgQ2hlY2sg aWYgb2ZfdHlwZSBhbmQgaW5oZXJpdGVkIHRhYmxlcyBhcmUgcHJlc2VudD8KKyAgICAgICAgIyAy KSBJZiB5ZXMgdGhlbiBGZXRjaCBhbGwgdGhlIGNvbHVtbnMgZm9yIG9mX3R5cGUgYW5kIGluaGVy aXRlZCB0YWJsZXMKKyAgICAgICAgIyAzKSBBZGQgY29sdW1ucyBpbiBjb2x1bW5zIGNvbGxlY3Rp b24KKyAgICAgICAgIyA0KSBGaW5kIGFsbCB0aGUgY29sdW1ucyBmb3IgdGFibGVzIGFuZCBmaWx0 ZXIgb3V0IGNvbHVtbnMgd2hpY2ggYXJlCisgICAgICAgICMgICBub3QgaW5oZXJpdGVkIGZyb20g YW55IHRhYmxlICYgZm9ybWF0IHRoZW0gb25lIGJ5IG9uZQorCisgICAgICAgICMgR2V0IG9mX3R5 cGUgdGFibGUgY29sdW1ucyBhbmQgYWRkIGl0IGludG8gY29sdW1ucyBkaWN0CisgICAgICAgIGlm IGRhdGFbJ3R5cG5hbWUnXToKKyAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIu am9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnZ2V0X2NvbHVtbnNfZm9yX3RhYmxlLnNxbCddKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bmFtZT1kYXRhWyd0eXBuYW1lJ10pCisKKyAg ICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCisgICAg ICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9z ZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorICAgICAgICAgICAgZGF0YVsnY29sdW1ucyddID0g cmVzWydyb3dzJ10KKworICAgICAgICAjIEdldCBpbmhlcml0ZWQgdGFibGUocykgY29sdW1ucyBh bmQgYWRkIGl0IGludG8gY29sdW1ucyBkaWN0CisgICAgICAgIGVsaWYgZGF0YVsnY29sbF9pbmhl cml0cyddIGFuZCBsZW4oZGF0YVsnY29sbF9pbmhlcml0cyddKSA+IDA6CisgICAgICAgICAgICBj b2x1bW5zID0gW10KKyAgICAgICAgICAgICMgUmV0dXJuIGFsbCB0YWJsZXMgd2hpY2ggY2FuIGJl IGluaGVyaXRlZCAmIGRvIG5vdCBzaG93CisgICAgICAgICAgICAjIHN5c3RlbSBjb2x1bW5zCisg ICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGFibGVfdGVt cGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J2dldF9pbmhlcml0cy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2hvd19zeXN0ZW1fb2JqZWN0cz1GYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICkKKyAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJy YXkoU1FMKQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICByZXR1 cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJzZXQpCisKKyAgICAgICAgICAgIGZv ciByb3cgaW4gcnNldFsncm93cyddOgorICAgICAgICAgICAgICAgIGlmIHJvd1snaW5oZXJpdHMn XSBpbiBkYXRhWydjb2xsX2luaGVyaXRzJ106CisgICAgICAgICAgICAgICAgICAgICMgRmV0Y2gg Y29sdW1ucyB1c2luZyBpbmhlcml0ZWQgdGFibGUgT0lECisgICAgICAgICAgICAgICAgICAgIFNR TCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKKyAgICAgICAgICAgICAgICAgICAgICAgIFtz ZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9j b2x1bW5zX2Zvcl90YWJsZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9cm93 WydvaWQnXQorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgIHN0YXR1 cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCisgICAgICAgICAgICAgICAgICAg IGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxf c2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKyAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5l eHRlbmQocmVzWydyb3dzJ11bOl0pCisgICAgICAgICAgICBkYXRhWydjb2x1bW5zJ10gPSBjb2x1 bW5zCisKKyAgICAgICAgIyBXZSB3aWxsIGZldGNoIGFsbCB0aGUgY29sdW1ucyBmb3IgdGhlIHRh YmxlIHVzaW5nCisgICAgICAgICMgY29sdW1ucyBwcm9wZXJ0aWVzLnNxbCwgc28gd2UgbmVlZCB0 byBzZXQgdGVtcGxhdGUgcGF0aAorICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpv aW4oW3NlbGYuY29sdW1uX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGlkPXRpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dfc3lz X29iamVjdHM9RmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAg ICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQorICAgICAgICBpZiBu b3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJv cm1zZz1yZXMpCisgICAgICAgIGFsbF9jb2x1bW5zID0gcmVzWydyb3dzJ10KKworICAgICAgICAj IEZpbHRlciBpbmhlcml0ZWQgY29sdW1ucyBmcm9tIGFsbCBjb2x1bW5zCisgICAgICAgIGlmICdj b2x1bW5zJyBpbiBkYXRhIGFuZCBsZW4oZGF0YVsnY29sdW1ucyddKSA+IDAgXAorICAgICAgICAg ICAgICAgIGFuZCBsZW4oYWxsX2NvbHVtbnMpID4gMDoKKyAgICAgICAgICAgIGZvciByb3cgaW4g ZGF0YVsnY29sdW1ucyddOgorICAgICAgICAgICAgICAgIGZvciBpLCBjb2wgaW4gZW51bWVyYXRl KGFsbF9jb2x1bW5zKToKKyAgICAgICAgICAgICAgICAgICAgIyBJZiBib3RoIG5hbWUgYXJlIHNh bWUgdGhlbiByZW1vdmUgaXQKKyAgICAgICAgICAgICAgICAgICAgIyBhcyBpdCBpcyBpbmhlcml0 ZWQgZnJvbSBvdGhlciB0YWJsZQorICAgICAgICAgICAgICAgICAgICBpZiBjb2xbJ25hbWUnXSA9 PSByb3dbJ25hbWUnXToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgUmVtb3ZlIHNhbWUgY29s dW1uIGZyb20gYWxsX2NvbHVtbnMgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYWxyZWFk eSBoYXZlIGl0IGNvbHVtbnMgY29sbGVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgZGVs IGFsbF9jb2x1bW5zW2ldCisKKyAgICAgICAgICAgICMgSWYgYW55IGNvbHVtbiBpcyBhZGRlZCB0 aGVuIHVwZGF0ZSBjb2x1bW5zIGNvbGxlY3Rpb24KKyAgICAgICAgICAgIGlmIGxlbihhbGxfY29s dW1ucykgPiAwOgorICAgICAgICAgICAgICAgIGRhdGFbJ2NvbHVtbnMnXSArPSBhbGxfY29sdW1u cworICAgICAgICAjIElmIG5vIGluaGVyaXRlZCBjb2x1bW5zIGZvdW5kIHRoZW4gYWRkIGFsbCBj b2x1bW5zCisgICAgICAgIGVsaWYgbGVuKGFsbF9jb2x1bW5zKSA+IDA6CisgICAgICAgICAgICBk YXRhWydjb2x1bW5zJ10gPSBhbGxfY29sdW1ucworCisgICAgICAgIGlmICdjb2x1bW5zJyBpbiBk YXRhIGFuZCBsZW4oZGF0YVsnY29sdW1ucyddKSA+IDA6CisgICAgICAgICAgICBkYXRhID0gc2Vs Zi5fY29sdW1uc19mb3JtYXR0ZXIodGlkLCBkYXRhKQorCisgICAgICAgICMgSGVyZSB3ZSB3aWxs IGFkZCBjb25zdHJhaW50IGluIG91ciBvdXRwdXQKKyAgICAgICAgZGF0YSA9IHNlbGYuX2luZGV4 X2NvbnN0cmFpbnRzX2Zvcm1hdHRlcihkaWQsIHRpZCwgZGF0YSkKKyAgICAgICAgZGF0YSA9IHNl bGYuX2ZvcmVpZ25fa2V5X2Zvcm1hdHRlcih0aWQsIGRhdGEpCisgICAgICAgIGRhdGEgPSBzZWxm Ll9jaGVja19jb25zdHJhaW50X2Zvcm1hdHRlcih0aWQsIGRhdGEpCisgICAgICAgIGRhdGEgPSBz ZWxmLl9leGNsdXNpb25fY29uc3RyYWludF9mb3JtYXR0ZXIoZGlkLCB0aWQsIGRhdGEpCisKKyAg ICAgICAgcmV0dXJuIGRhdGEKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2NsdHlwZV9m b3JtYXR0ZXIoZGF0YV90eXBlKToKKyAgICAgICAgIiIiCisKKyAgICAgICAgQXJnczoKKyAgICAg ICAgICAgIGRhdGFfdHlwZTogVHlwZSBzdHJpbmcKKworICAgICAgICBSZXR1cm5zOgorICAgICAg ICAgICAgV2UgbmVlZCB0byByZW1vdmUgW10gZnJvbSB0eXBlIGFuZCBhcHBlbmQgaXQKKyAgICAg ICAgICAgIGFmdGVyIGxlbmd0aC9wcmVjaXNpb24gc28gd2Ugd2lsbCBzZW5kIGZsYWcgZm9yCisg ICAgICAgICAgICBzcWwgdGVtcGxhdGUKKyAgICAgICAgIiIiCisgICAgICAgIGlmICdbXScgaW4g ZGF0YV90eXBlOgorICAgICAgICAgICAgcmV0dXJuIGRhdGFfdHlwZVs6LTJdLCBUcnVlCisgICAg ICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gZGF0YV90eXBlLCBGYWxzZQorCisgICAgZGVm IGdldF90YWJsZV9kZXBlbmRlbnRzKHNlbGYsIHRpZCk6CisgICAgICAgICIiIgorICAgICAgICBU aGlzIGZ1bmN0aW9uIGdldCB0aGUgZGVwZW5kZW50cyBhbmQgcmV0dXJuIGFqYXggcmVzcG9uc2UK KyAgICAgICAgZm9yIHRoZSB0YWJsZSBub2RlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg ICB0aWQ6IFRhYmxlIElECisgICAgICAgICIiIgorICAgICAgICAjIFNwZWNpZmljIGNvbmRpdGlv biBmb3IgY29sdW1uIHdoaWNoIHdlIG5lZWQgdG8gYXBwZW5kCisgICAgICAgIHdoZXJlID0gIldI RVJFIGRlcC5yZWZvYmppZD17MH06Ok9JRCIuZm9ybWF0KHRpZCkKKworICAgICAgICBkZXBlbmRl bnRzX3Jlc3VsdCA9IHNlbGYuZ2V0X2RlcGVuZGVudHMoCisgICAgICAgICAgICBzZWxmLmNvbm4s IHRpZAorICAgICAgICApCisKKyAgICAgICAgIyBTcGVjaWZpYyBzcWwgdG8gcnVuIGFnYWludCBj b2x1bW4gdG8gZmV0Y2ggZGVwZW5kZW50cworICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUo Ii8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnZGVwZW5kLnNxbCddKSwgd2hlcmU9d2hlcmUpCisKKyAgICAg ICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKyAgICAgICAgaWYg bm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJy b3Jtc2c9cmVzKQorCisgICAgICAgIGZvciByb3cgaW4gcmVzWydyb3dzJ106CisgICAgICAgICAg ICByZWZfbmFtZSA9IHJvd1sncmVmbmFtZSddCisgICAgICAgICAgICBpZiByZWZfbmFtZSBpcyBO b25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRlcF90eXBlID0g JycKKyAgICAgICAgICAgIGRlcF9zdHIgPSByb3dbJ2RlcHR5cGUnXQorICAgICAgICAgICAgaWYg ZGVwX3N0ciA9PSAnYSc6CisgICAgICAgICAgICAgICAgZGVwX3R5cGUgPSAnYXV0bycKKyAgICAg ICAgICAgIGVsaWYgZGVwX3N0ciA9PSAnbic6CisgICAgICAgICAgICAgICAgZGVwX3R5cGUgPSAn bm9ybWFsJworICAgICAgICAgICAgZWxpZiBkZXBfc3RyID09ICdpJzoKKyAgICAgICAgICAgICAg ICBkZXBfdHlwZSA9ICdpbnRlcm5hbCcKKworICAgICAgICAgICAgZGVwZW5kZW50c19yZXN1bHQu YXBwZW5kKHsndHlwZSc6ICdzZXF1ZW5jZScsICduYW1lJzogcmVmX25hbWUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWVsZCc6IGRlcF90eXBlfSkKKworICAgICAg ICByZXR1cm4gYWpheF9yZXNwb25zZSgKKyAgICAgICAgICAgIHJlc3BvbnNlPWRlcGVuZGVudHNf cmVzdWx0LAorICAgICAgICAgICAgc3RhdHVzPTIwMAorICAgICAgICApCisKKyAgICBkZWYgZ2V0 X3RhYmxlX2RlcGVuZGVuY2llcyhzZWxmLCB0aWQpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhp cyBmdW5jdGlvbiBnZXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmV0dXJuIGFqYXggcmVzcG9uc2UK KyAgICAgICAgZm9yIHRoZSB0YWJsZSBub2RlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg ICB0aWQ6IFRhYmxlIElECisKKyAgICAgICAgIiIiCisgICAgICAgIGRlcGVuZGVuY2llc19yZXN1 bHQgPSBzZWxmLmdldF9kZXBlbmRlbmNpZXMoCisgICAgICAgICAgICBzZWxmLmNvbm4sIHRpZAor ICAgICAgICApCisKKyAgICAgICAgcmV0dXJuIGFqYXhfcmVzcG9uc2UoCisgICAgICAgICAgICBy ZXNwb25zZT1kZXBlbmRlbmNpZXNfcmVzdWx0LAorICAgICAgICAgICAgc3RhdHVzPTIwMAorICAg ICAgICApCisKKyAgICBkZWYgZ2V0X3RhYmxlX3N0YXRpc3RpY3Moc2VsZiwgc2NpZCwgdGlkKToK KyAgICAgICAgIiIiCisgICAgICAgIFN0YXRpc3RpY3MKKworICAgICAgICBBcmdzOgorICAgICAg ICAgICAgc2NpZDogU2NoZW1hIElkCisgICAgICAgICAgICB0aWQ6IFRhYmxlIElkCisKKyAgICAg ICAgUmV0dXJucyB0aGUgc3RhdGlzdGljcyBmb3IgYSBwYXJ0aWN1bGFyIHRhYmxlIGlmIHRpZCBp cyBzcGVjaWZpZWQsCisgICAgICAgIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiBzdGF0aXN0aWNz IGZvciBhbGwgdGhlIHRhYmxlcyBpbiB0aGF0CisgICAgICAgIHNjaGVtYS4KKyAgICAgICAgIiIi CisKKyAgICAgICAgIyBGZXRjaCBzY2hlbWEgbmFtZQorICAgICAgICBzdGF0dXMsIHNjaGVtYV9u YW1lID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKAorICAgICAgICAgICAgcmVuZGVyX3RlbXBs YXRlKAorICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgs ICdnZXRfc2NoZW1hLnNxbCddKSwKKyAgICAgICAgICAgICAgICBjb25uPXNlbGYuY29ubiwgc2Np ZD1zY2lkCisgICAgICAgICAgICApCisgICAgICAgICkKKyAgICAgICAgaWYgbm90IHN0YXR1czoK KyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c2NoZW1h X25hbWUpCisKKyAgICAgICAgaWYgdGlkIGlzIE5vbmU6CisgICAgICAgICAgICBzdGF0dXMsIHJl cyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoCisgICAgICAgICAgICAgICAgcmVuZGVyX3RlbXBs YXRlKAorICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9w YXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbGxfdGFibGVfc3RhdHMuc3Fs J10pLCBjb25uPXNlbGYuY29ubiwKKyAgICAgICAgICAgICAgICAgICAgc2NoZW1hX25hbWU9c2No ZW1hX25hbWUKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICApCisgICAgICAgIGVsc2U6 CisgICAgICAgICAgICAjIEZvciBJbmRpdmlkdWFsIHRhYmxlIHN0YXRzCisKKyAgICAgICAgICAg ICMgQ2hlY2sgaWYgcGdzdGF0dHVwbGUgZXh0ZW5zaW9uIGlzIGFscmVhZHkgY3JlYXRlZD8KKyAg ICAgICAgICAgICMgaWYgY3JlYXRlZCB0aGVuIG9ubHkgYWRkIGV4dGVuZGVkIHN0YXRzCisgICAg ICAgICAgICBzdGF0dXMsIGlzX3Bnc3RhdHR1cGxlID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFy KCIiIgorICAgICAgICAgICAgU0VMRUNUIChjb3VudChleHRuYW1lKSA+IDApIEFTIGlzX3Bnc3Rh dHR1cGxlCisgICAgICAgICAgICBGUk9NIHBnX2V4dGVuc2lvbgorICAgICAgICAgICAgV0hFUkUg ZXh0bmFtZT0ncGdzdGF0dHVwbGUnCisgICAgICAgICAgICAiIiIpCisgICAgICAgICAgICBpZiBu b3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3Io ZXJyb3Jtc2c9aXNfcGdzdGF0dHVwbGUpCisKKyAgICAgICAgICAgICMgRmV0Y2ggVGFibGUgbmFt ZQorICAgICAgICAgICAgc3RhdHVzLCB0YWJsZV9uYW1lID0gc2VsZi5jb25uLmV4ZWN1dGVfc2Nh bGFyKAorICAgICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAg ICAgIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ2dldF90YWJsZS5zcWwnXSks CisgICAgICAgICAgICAgICAgICAgIGNvbm49c2VsZi5jb25uLCBzY2lkPXNjaWQsIHRpZD10aWQK KyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICApCisgICAgICAgICAgICBpZiBub3Qgc3Rh dHVzOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jt c2c9dGFibGVfbmFtZSkKKworICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhl Y3V0ZV9kaWN0KAorICAgICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAg ICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ3N0YXRzLnNxbCdd KSwKKyAgICAgICAgICAgICAgICAgICAgY29ubj1zZWxmLmNvbm4sIHNjaGVtYV9uYW1lPXNjaGVt YV9uYW1lLAorICAgICAgICAgICAgICAgICAgICB0YWJsZV9uYW1lPXRhYmxlX25hbWUsCisgICAg ICAgICAgICAgICAgICAgIGlzX3Bnc3RhdHR1cGxlPWlzX3Bnc3RhdHR1cGxlLCB0aWQ9dGlkCisg ICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorCisgICAgICAgIGlmIG5vdCBzdGF0dXM6 CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykK KworICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgZGF0YT1y ZXMsCisgICAgICAgICAgICBzdGF0dXM9MjAwCisgICAgICAgICkKKworICAgIGRlZiBnZXRfcmV2 ZXJzZV9lbmdpbmVlcmVkX3NxbChzZWxmLCBkaWQsIHNjaWQsIHRpZCwgbWFpbl9zcWwsIGRhdGEp OgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZXMgcmV2ZXJz ZSBlbmdpbmVlcmVkIHNxbCBmb3IKKyAgICAgICAgdGhlIHRhYmxlIG9iamVjdAorCisgICAgICAg ICBBcmdzOgorICAgICAgICAgICBkaWQ6IERhdGFiYXNlIElECisgICAgICAgICAgIHNjaWQ6IFNj aGVtYSBJRAorICAgICAgICAgICB0aWQ6IFRhYmxlIElECisgICAgICAgICAgIG1haW5fc3FsOiBM aXN0IGNvbnRhaW5zIGFsbCB0aGUgcmV2ZXJzZWQgZW5naW5lZXJlZCBzcWwKKyAgICAgICAgICAg ZGF0YTogVGFibGUncyBEYXRhCisgICAgICAgICIiIgorICAgICAgICAiIiIKKyAgICAgICAgIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIDEpIFJldmVyc2Ug ZW5naW5lZXJlZCBzcWwgZm9yIFRBQkxFCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBUYWJsZSAmIFNjaGVtYSBk ZWNsYXJhdGlvbiBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlbSBpbiBjaGlsZCBub2RlcworICAgICAg ICBzY2hlbWEgPSBkYXRhWydzY2hlbWEnXQorICAgICAgICB0YWJsZSA9IGRhdGFbJ25hbWUnXQor CisgICAgICAgIGRhdGEgPSBzZWxmLl9mb3JtYXR0ZXIoZGlkLCBzY2lkLCB0aWQsIGRhdGEpCisK KyAgICAgICAgIyBOb3cgd2UgaGF2ZSBhbGwgbGlzIG9mIGNvbHVtbnMgd2hpY2ggd2UgbmVlZAor ICAgICAgICAjIHRvIGluY2x1ZGUgaW4gb3VyIGNyZWF0ZSBkZWZpbml0aW9uLCBMZXQncyBmb3Jt YXQgdGhlbQorICAgICAgICBpZiAnY29sdW1ucycgaW4gZGF0YToKKyAgICAgICAgICAgIGZvciBj IGluIGRhdGFbJ2NvbHVtbnMnXToKKyAgICAgICAgICAgICAgICBpZiAnYXR0YWNsJyBpbiBjOgor ICAgICAgICAgICAgICAgICAgICBjWydhdHRhY2wnXSA9IHBhcnNlX3ByaXZfdG9fZGIoY1snYXR0 YWNsJ10sIHNlbGYuY29sdW1uX2FjbCkKKworICAgICAgICAgICAgICAgICMgY2hlY2sgdHlwZSBm b3IgJ1tdJyBpbiBpdAorICAgICAgICAgICAgICAgIGlmICdjbHR5cGUnIGluIGM6CisgICAgICAg ICAgICAgICAgICAgIGNbJ2NsdHlwZSddLCBjWydoYXNTcXJCcmFja2V0J10gPSBcCisgICAgICAg ICAgICAgICAgICAgICAgICBzZWxmLl9jbHR5cGVfZm9ybWF0dGVyKGNbJ2NsdHlwZSddKQorCisg ICAgICAgIHNxbF9oZWFkZXIgPSB1Ii0tIFRhYmxlOiB7MH1cblxuLS0gIi5mb3JtYXQoCisgICAg ICAgICAgICBzZWxmLnF0SWRlbnQoc2VsZi5jb25uLCBkYXRhWydzY2hlbWEnXSwgZGF0YVsnbmFt ZSddKSkKKworICAgICAgICBzcWxfaGVhZGVyICs9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihb c2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCisKKyAgICAgICAgc3Fs X2hlYWRlciA9IHNxbF9oZWFkZXIuc3RyaXAoJ1xuJykKKyAgICAgICAgc3FsX2hlYWRlciArPSAn XG4nCisKKyAgICAgICAgIyBBZGQgaW50byBtYWluIHNxbAorICAgICAgICBtYWluX3NxbC5hcHBl bmQoc3FsX2hlYWRlcikKKworICAgICAgICAjIFBhcnNlIHByaXZpbGVnZSBkYXRhCisgICAgICAg IGlmICdyZWxhY2wnIGluIGRhdGE6CisgICAgICAgICAgICBkYXRhWydyZWxhY2wnXSA9IHBhcnNl X3ByaXZfdG9fZGIoZGF0YVsncmVsYWNsJ10sIHNlbGYuYWNsKQorCisgICAgICAgICMgaWYgdGFi bGUgaXMgcGFydGl0aW9ucyB0aGVuCisgICAgICAgIGlmICdyZWxpc3BhcnRpdGlvbicgaW4gZGF0 YSBhbmQgZGF0YVsncmVsaXNwYXJ0aXRpb24nXToKKyAgICAgICAgICAgIHRhYmxlX3NxbCA9IHJl bmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5wYXJ0aXRpb25fdGVtcGxhdGVfcGF0aCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0ZS5z cWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRh LCBjb25uPXNlbGYuY29ubikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRhYmxlX3NxbCA9 IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3JlYXRlLnNx bCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEs IGNvbm49c2VsZi5jb25uKQorCisgICAgICAgICMgQWRkIGludG8gbWFpbiBzcWwKKyAgICAgICAg dGFibGVfc3FsID0gcmUuc3ViKCdcbnsyLH0nLCAnXG5cbicsIHRhYmxlX3NxbCkKKyAgICAgICAg bWFpbl9zcWwuYXBwZW5kKHRhYmxlX3NxbC5zdHJpcCgnXG4nKSkKKworICAgICAgICAiIiIKKyAg ICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAy KSBSZXZlcnNlIGVuZ2luZWVyZWQgc3FsIGZvciBJTkRFWAorICAgICAgICAjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAiIiIKKworICAgICAgICBTUUwgPSBy ZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuaW5kZXhfdGVtcGxhdGVfcGF0aCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9kZXMuc3FsJ10pLCB0aWQ9dGlk KQorICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkK KyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2 ZXJfZXJyb3IoZXJyb3Jtc2c9cnNldCkKKworICAgICAgICBmb3Igcm93IGluIHJzZXRbJ3Jvd3Mn XToKKworICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmlu ZGV4X3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkaWQ9ZGlkLCB0aWQ9dGlkLCBpZHg9cm93WydvaWQnXSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKKworICAg ICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKyAgICAg ICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3Nl cnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgICAgIGRhdGEgPSBkaWN0KHJlc1sn cm93cyddWzBdKQorICAgICAgICAgICAgIyBBZGRpbmcgcGFyZW50IGludG8gZGF0YSBkaWN0LCB3 aWxsIGJlIHVzaW5nIGl0IHdoaWxlIGNyZWF0aW5nIHNxbAorICAgICAgICAgICAgZGF0YVsnc2No ZW1hJ10gPSBzY2hlbWEKKyAgICAgICAgICAgIGRhdGFbJ3RhYmxlJ10gPSB0YWJsZQorICAgICAg ICAgICAgIyBXZSBhbHNvIG5lZWQgdG8gZmVjdGggY29sdW1ucyBvZiBpbmRleAorICAgICAgICAg ICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmluZGV4X3RlbXBsYXRlX3Bh dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2x1bW5f ZGV0YWlscy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4PXJv d1snb2lkJ10pCisgICAgICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8y ZGFycmF5KFNRTCkKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAg cmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQorCisgICAgICAgICAg ICAjICdhdHRkZWYnIGNvbWVzIHdpdGggcXVvdGVzIGZyb20gcXVlcnkgc28gd2UgbmVlZCB0byBz dHJpcCB0aGVtCisgICAgICAgICAgICAjICdvcHRpb25zJyB3ZSBuZWVkIHRydWUvZmFsc2UgdG8g cmVuZGVyIHN3aXRjaAorICAgICAgICAgICAgIyBBU0MoZmFsc2UpL0RFU0ModHJ1ZSkKKyAgICAg ICAgICAgIGNvbHVtbnMgPSBbXQorICAgICAgICAgICAgY29scyA9IFtdCisgICAgICAgICAgICBm b3IgY29sX3JvdyBpbiByc2V0Wydyb3dzJ106CisgICAgICAgICAgICAgICAgIyBXZSBuZWVkIGFs bCBkYXRhIGFzIGNvbGxlY3Rpb24gZm9yIENvbHVtbnNNb2RlbAorICAgICAgICAgICAgICAgIGNv bHNfZGF0YSA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ2NvbG5hbWUnOiBjb2xfcm93WydhdHRk ZWYnXS5zdHJpcCgnIicpLAorICAgICAgICAgICAgICAgICAgICAnY29sbHNwY25hbWUnOiBjb2xf cm93Wydjb2xsbnNwbmFtZSddLAorICAgICAgICAgICAgICAgICAgICAnb3BfY2xhc3MnOiBjb2xf cm93WydvcGNuYW1lJ10sCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIGNv bF9yb3dbJ29wdGlvbnMnXVswXSA9PSAnREVTQyc6CisgICAgICAgICAgICAgICAgICAgIGNvbHNf ZGF0YVsnc29ydF9vcmRlciddID0gVHJ1ZQorICAgICAgICAgICAgICAgIGNvbHVtbnMuYXBwZW5k KGNvbHNfZGF0YSkKKworICAgICAgICAgICAgICAgICMgV2UgbmVlZCBzYW1lIGRhdGEgYXMgc3Ry aW5nIHRvIGRpc3BsYXkgaW4gcHJvcGVydGllcyB3aW5kb3cKKyAgICAgICAgICAgICAgICAjIElm IG11bHRpcGxlIGNvbHVtbiB0aGVuIHNlcGFyYXRlIGl0IGJ5IGNvbG9uCisgICAgICAgICAgICAg ICAgY29sc19zdHIgPSBjb2xfcm93WydhdHRkZWYnXQorICAgICAgICAgICAgICAgIGlmIGNvbF9y b3dbJ2NvbGxuc3BuYW1lJ106CisgICAgICAgICAgICAgICAgICAgIGNvbHNfc3RyICs9ICcgQ09M TEFURSAnICsgY29sX3Jvd1snY29sbG5zcG5hbWUnXQorICAgICAgICAgICAgICAgIGlmIGNvbF9y b3dbJ29wY25hbWUnXToKKyAgICAgICAgICAgICAgICAgICAgY29sc19zdHIgKz0gJyAnICsgY29s X3Jvd1snb3BjbmFtZSddCisgICAgICAgICAgICAgICAgaWYgY29sX3Jvd1snb3B0aW9ucyddWzBd ID09ICdERVNDJzoKKyAgICAgICAgICAgICAgICAgICAgY29sc19zdHIgKz0gJyBERVNDJworICAg ICAgICAgICAgICAgIGNvbHMuYXBwZW5kKGNvbHNfc3RyKQorCisgICAgICAgICAgICAjIFB1c2gg YXMgY29sbGVjdGlvbgorICAgICAgICAgICAgZGF0YVsnY29sdW1ucyddID0gY29sdW1ucworICAg ICAgICAgICAgIyBQdXNoIGFzIHN0cmluZworICAgICAgICAgICAgZGF0YVsnY29scyddID0gJywg Jy5qb2luKGNvbHMpCisKKyAgICAgICAgICAgIHNxbF9oZWFkZXIgPSB1IlxuLS0gSW5kZXg6IHsw fVxuXG4tLSAiLmZvcm1hdChkYXRhWyduYW1lJ10pCisKKyAgICAgICAgICAgIHNxbF9oZWFkZXIg Kz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmluZGV4X3RlbXBsYXRlX3BhdGgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlbGV0 ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh PWRhdGEsIGNvbm49c2VsZi5jb25uKQorCisgICAgICAgICAgICBpbmRleF9zcWwgPSByZW5kZXJf dGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuaW5kZXhfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0ZS5zcWwnXSksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBjb25uPXNl bGYuY29ubikKKyAgICAgICAgICAgIGluZGV4X3NxbCArPSAiXG4iCisgICAgICAgICAgICBpbmRl eF9zcWwgKz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmluZGV4X3RlbXBsYXRlX3Bh dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn YWx0ZXIuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk YXRhPWRhdGEsIGNvbm49c2VsZi5jb25uKQorCisgICAgICAgICAgICAjIEFkZCBpbnRvIG1haW4g c3FsCisgICAgICAgICAgICBpbmRleF9zcWwgPSByZS5zdWIoJ1xuezIsfScsICdcblxuJywgaW5k ZXhfc3FsKQorICAgICAgICAgICAgbWFpbl9zcWwuYXBwZW5kKHNxbF9oZWFkZXIgKyAnXG5cbicg KyBpbmRleF9zcWwuc3RyaXAoJ1xuJykpCisKKyAgICAgICAgIiIiCisgICAgICAgICMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAzKSBSZXZlcnNlIGVu Z2luZWVyZWQgc3FsIGZvciBUUklHR0VSUworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICIiIgorICAgICAgICBTUUwgPSByZW5kZXJfdGVt cGxhdGUoIi8iLmpvaW4oW3NlbGYudHJpZ2dlcl90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub2Rlcy5zcWwnXSksIHRpZD10aWQpCisgICAg ICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQorICAgICAg ICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1yc2V0KQorCisgICAgICAgIGZvciByb3cgaW4gcnNldFsncm93cyddOgorICAg ICAgICAgICAgdHJpZ2dlcl9zcWwgPSAnJworCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVt cGxhdGUoIi8iLmpvaW4oW3NlbGYudHJpZ2dlcl90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCwgdHJpZD1yb3dbJ29pZCddLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRs YXN0c3lzb2lkKQorCisgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRl X2RpY3QoU1FMKQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICBy ZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKworICAgICAgICAgICAg ZGF0YSA9IGRpY3QocmVzWydyb3dzJ11bMF0pCisgICAgICAgICAgICAjIEFkZGluZyBwYXJlbnQg aW50byBkYXRhIGRpY3QsIHdpbGwgYmUgdXNpbmcgaXQgd2hpbGUgY3JlYXRpbmcgc3FsCisgICAg ICAgICAgICBkYXRhWydzY2hlbWEnXSA9IHNjaGVtYQorICAgICAgICAgICAgZGF0YVsndGFibGUn XSA9IHRhYmxlCisKKyAgICAgICAgICAgIGlmIGRhdGFbJ3RnbmFyZ3MnXSA+IDE6CisgICAgICAg ICAgICAgICAgIyBXZSBrbm93IHRoYXQgdHJpZ2dlciBoYXMgbW9yZSB0aGFuIDEgYXJndW1lbnRz LAorICAgICAgICAgICAgICAgICMgbGV0J3Mgam9pbiB0aGVtCisgICAgICAgICAgICAgICAgZGF0 YVsndGdhcmdzJ10gPSAnLCAnLmpvaW4oZGF0YVsndGdhcmdzJ10pCisKKyAgICAgICAgICAgIGlm IGxlbihkYXRhWyd0Z2F0dHInXSkgPiAxOgorICAgICAgICAgICAgICAgIGNvbHVtbnMgPSAnLCAn LmpvaW4oZGF0YVsndGdhdHRyJ10uc3BsaXQoJyAnKSkKKworICAgICAgICAgICAgICAgIFNRTCA9 IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50cmlnZ2VyX3RlbXBsYXRlX3BhdGgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2NvbHVt bnMuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlk LCBjbGlzdD1jb2x1bW5zKQorCisgICAgICAgICAgICAgICAgc3RhdHVzLCByc2V0ID0gc2VsZi5j b25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCisgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoK KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1z Zz1yc2V0KQorICAgICAgICAgICAgICAgICMgJ3RnYXR0cicgY29udGFpbnMgbGlzdCBvZiBjb2x1 bW5zIGZyb20gdGFibGUgdXNlZCBpbiB0cmlnZ2VyCisgICAgICAgICAgICAgICAgY29sdW1ucyA9 IFtdCisKKyAgICAgICAgICAgICAgICBmb3IgY29sX3JvdyBpbiByc2V0Wydyb3dzJ106CisgICAg ICAgICAgICAgICAgICAgIGNvbHVtbnMuYXBwZW5kKHsnY29sdW1uJzogY29sX3Jvd1snbmFtZSdd fSkKKworICAgICAgICAgICAgICAgIGRhdGFbJ2NvbHVtbnMnXSA9IGNvbHVtbnMKKworICAgICAg ICAgICAgZGF0YSA9IHRyaWdnZXJfZGVmaW5pdGlvbihkYXRhKQorCisgICAgICAgICAgICBzcWxf aGVhZGVyID0gdSJcbi0tIFRyaWdnZXI6IHswfVxuXG4tLSAiLmZvcm1hdChkYXRhWyduYW1lJ10p CisKKyAgICAgICAgICAgIHNxbF9oZWFkZXIgKz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtz ZWxmLnRyaWdnZXJfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnZGVsZXRlLnNxbCddKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCisKKyAg ICAgICAgICAgICMgSWYgdGhlIHJlcXVlc3QgZm9yIG5ldyBvYmplY3Qgd2hpY2ggZG8gbm90IGhh dmUgZGlkCisgICAgICAgICAgICB0cmlnZ2VyX3NxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9p bihbc2VsZi50cmlnZ2VyX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0ZS5zcWwnXSksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25uKQor CisgICAgICAgICAgICB0cmlnZ2VyX3NxbCA9IHNxbF9oZWFkZXIgKyAnXG5cbicgKyB0cmlnZ2Vy X3NxbC5zdHJpcCgnXG4nKQorCisgICAgICAgICAgICAjIElmIHRyaWdnZXIgaXMgZGlzYWJsZWQg dGhlbiBhZGQgc3FsIGNvZGUgZm9yIHRoZSBzYW1lCisgICAgICAgICAgICBpZiBub3QgZGF0YVsn aXNfZW5hYmxlX3RyaWdnZXInXToKKyAgICAgICAgICAgICAgICB0cmlnZ2VyX3NxbCArPSAnXG5c bicKKyAgICAgICAgICAgICAgICB0cmlnZ2VyX3NxbCArPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpv aW4oWworICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJfdGVtcGxhdGVfcGF0aCwKKyAg ICAgICAgICAgICAgICAgICAgJ2VuYWJsZV9kaXNhYmxlX3RyaWdnZXIuc3FsJ10pLAorICAgICAg ICAgICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25uKQorCisgICAgICAgICAgICAj IEFkZCBpbnRvIG1haW4gc3FsCisgICAgICAgICAgICB0cmlnZ2VyX3NxbCA9IHJlLnN1YignXG57 Mix9JywgJ1xuXG4nLCB0cmlnZ2VyX3NxbCkKKyAgICAgICAgICAgIG1haW5fc3FsLmFwcGVuZCh0 cmlnZ2VyX3NxbCkKKworICAgICAgICAiIiIKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIDQpIFJldmVyc2UgZW5naW5lZXJlZCBzcWwgZm9y IFJVTEVTCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAg ICAgICAgIiIiCisKKyAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAorICAg ICAgICAgICAgW3NlbGYucnVsZXNfdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLCB0 aWQ9dGlkKQorCisgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJy YXkoU1FMKQorICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVy bmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQorCisgICAgICAgIGZvciByb3cgaW4gcnNl dFsncm93cyddOgorICAgICAgICAgICAgcnVsZXNfc3FsID0gJ1xuJworICAgICAgICAgICAgU1FM ID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgICAgIFtzZWxmLnJ1bGVz X3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddCisgICAgICAgICAgICApLCByaWQ9cm93 WydvaWQnXSwgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCisKKyAgICAgICAgICAg IHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCisgICAgICAgICAgICBp ZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJy b3IoZXJyb3Jtc2c9cmVzKQorCisgICAgICAgICAgICByZXNfZGF0YSA9IHBhcnNlX3J1bGVfZGVm aW5pdGlvbihyZXMpCisgICAgICAgICAgICBydWxlc19zcWwgKz0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKAorICAgICAgICAgICAgICAgIFtzZWxmLnJ1bGVzX3RlbXBsYXRlX3BhdGgsICdjcmVh dGUuc3FsJ10pLAorICAgICAgICAgICAgICAgIGRhdGE9cmVzX2RhdGEsIGRpc3BsYXlfY29tbWVu dHM9VHJ1ZSkKKworICAgICAgICAgICAgIyBBZGQgaW50byBtYWluIHNxbAorICAgICAgICAgICAg cnVsZXNfc3FsID0gcmUuc3ViKCdcbnsyLH0nLCAnXG5cbicsIHJ1bGVzX3NxbCkKKyAgICAgICAg ICAgIG1haW5fc3FsLmFwcGVuZChydWxlc19zcWwpCisKKyAgICAgICAgIiIiCisgICAgICAgICMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIDUpIFJl dmVyc2UgZW5naW5lZXJlZCBzcWwgZm9yIFBBUlRJVElPTlMKKyAgICAgICAgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICIiIgorICAgICAgICBpZiAn aXNfcGFydGl0aW9uZWQnIGluIGRhdGEgYW5kIGRhdGFbJ2lzX3BhcnRpdGlvbmVkJ106CisgICAg ICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYucGFydGl0aW9uX3Rl bXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdub2Rlcy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NpZD1z Y2lkLCB0aWQ9dGlkKQorICAgICAgICAgICAgc3RhdHVzLCByc2V0ID0gc2VsZi5jb25uLmV4ZWN1 dGVfMmRhcnJheShTUUwpCisgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAg ICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cnNldCkKKworICAgICAg ICAgICAgc3FsX2hlYWRlciA9IHUiXG4tLSBQYXJ0aXRpb25zIFNRTCIKKyAgICAgICAgICAgIHBh cnRpdGlvbl9zcWwgPSAnJworICAgICAgICAgICAgZm9yIHJvdyBpbiByc2V0Wydyb3dzJ106Cisg ICAgICAgICAgICAgICAgcGFydF9kYXRhID0gZGljdCgpCisgICAgICAgICAgICAgICAgcGFydF9k YXRhWydwYXJ0aXRpb25lZF90YWJsZV9uYW1lJ10gPSBkYXRhWyduYW1lJ10KKyAgICAgICAgICAg ICAgICBwYXJ0X2RhdGFbJ3BhcmVudF9zY2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCisgICAgICAg ICAgICAgICAgcGFydF9kYXRhWydzY2hlbWEnXSA9IHJvd1snc2NoZW1hX25hbWUnXQorICAgICAg ICAgICAgICAgIHBhcnRfZGF0YVsncmVsaXNwYXJ0aXRpb24nXSA9IFRydWUKKyAgICAgICAgICAg ICAgICBwYXJ0X2RhdGFbJ25hbWUnXSA9IHJvd1snbmFtZSddCisgICAgICAgICAgICAgICAgcGFy dF9kYXRhWydwYXJ0aXRpb25fdmFsdWUnXSA9IHJvd1sncGFydGl0aW9uX3ZhbHVlJ10KKyAgICAg ICAgICAgICAgICBwYXJ0X2RhdGFbJ2lzX3BhcnRpdGlvbmVkJ10gPSByb3cgWydpc19wYXJ0aXRp b25lZCddCisgICAgICAgICAgICAgICAgcGFydF9kYXRhWydwYXJ0aXRpb25fc2NoZW1lJ10gPSBy b3dbJ3BhcnRpdGlvbl9zY2hlbWUnXQorCisgICAgICAgICAgICAgICAgcGFydGl0aW9uX3NxbCAr PSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCisgICAgICAgICAgICAgICAgICAgIFtzZWxmLnBh cnRpdGlvbl90ZW1wbGF0ZV9wYXRoLCAnY3JlYXRlLnNxbCddKSwKKyAgICAgICAgICAgICAgICAg ICAgZGF0YT1wYXJ0X2RhdGEsIGNvbm49c2VsZi5jb25uKQorCisgICAgICAgICAgICAjIEFkZCBp bnRvIG1haW4gc3FsCisgICAgICAgICAgICBwYXJ0aXRpb25fc3FsID0gcmUuc3ViKCdcbnsyLH0n LCAnXG5cbicsIHBhcnRpdGlvbl9zcWwpCisgICAgICAgICAgICBtYWluX3NxbC5hcHBlbmQoc3Fs X2hlYWRlciArICdcblxuJyArIHBhcnRpdGlvbl9zcWwuc3RyaXAoJ1xuJykpCisKKyAgICAgICAg c3FsID0gJ1xuJy5qb2luKG1haW5fc3FsKQorCisgICAgICAgIHJldHVybiBhamF4X3Jlc3BvbnNl KHJlc3BvbnNlPXNxbC5zdHJpcCgnXG4nKSkKKworICAgIGRlZiByZXNldF9zdGF0aXN0aWNzKHNl bGYsIHNjaWQsIHRpZCk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwg cmVzZXQgc3RhdGlzdGljcyBvZiB0YWJsZQorCisgICAgICAgICBBcmdzOgorICAgICAgICAgICBz Y2lkOiBTY2hlbWEgSUQKKyAgICAgICAgICAgdGlkOiBUYWJsZSBJRAorICAgICAgICAiIiIKKyAg ICAgICAgdHJ5OgorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtz ZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdyZXNldF9zdGF0cy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGlkPXRpZCkKKyAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25u LmV4ZWN1dGVfc2NhbGFyKFNRTCkKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAg ICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAg ICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICAgICAgc3Vj Y2Vzcz0xLAorICAgICAgICAgICAgICAgIGluZm89Z2V0dGV4dCgiVGFibGUgc3RhdGlzdGljcyBo YXZlIGJlZW4gcmVzZXQiKSwKKyAgICAgICAgICAgICAgICBkYXRhPXsKKyAgICAgICAgICAgICAg ICAgICAgJ2lkJzogdGlkLAorICAgICAgICAgICAgICAgICAgICAnc2NpZCc6IHNjaWQKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICApCisKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBh cyBlOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1z dHIoZSkpCisKKyAgICBkZWYgZ2V0X3BhcnRpdGlvbl9zY2hlbWUoc2VsZiwgZGF0YSk6CisgICAg ICAgIHBhcnRpdGlvbl9zY2hlbWUgPSBOb25lCisgICAgICAgIGlmICdwYXJ0aXRpb25fdHlwZScg aW4gZGF0YSBcCisgICAgICAgICAgICAgICAgYW5kIGRhdGFbJ3BhcnRpdGlvbl90eXBlJ10gPT0g J3JhbmdlJzoKKyAgICAgICAgICAgIHBhcnRpdGlvbl9zY2hlbWUgPSAnUkFOR0UgKCcKKyAgICAg ICAgZWxpZiAncGFydGl0aW9uX3R5cGUnIGluIGRhdGEgXAorICAgICAgICAgICAgICAgIGFuZCBk YXRhWydwYXJ0aXRpb25fdHlwZSddID09ICdsaXN0JzoKKyAgICAgICAgICAgIHBhcnRpdGlvbl9z Y2hlbWUgPSAnTElTVCAoJworCisgICAgICAgIGZvciByb3cgaW4gZGF0YVsncGFydGl0aW9uX2tl eXMnXToKKyAgICAgICAgICAgIGlmIHJvd1sna2V5X3R5cGUnXSA9PSAnY29sdW1uJzoKKyAgICAg ICAgICAgICAgICBwYXJ0aXRpb25fc2NoZW1lICs9IHNlbGYucXRJZGVudCgKKyAgICAgICAgICAg ICAgICAgICAgc2VsZi5jb25uLCByb3dbJ3B0X2NvbHVtbiddKSArICcsICcKKyAgICAgICAgICAg IGVsaWYgcm93WydrZXlfdHlwZSddID09ICdleHByZXNzaW9uJzoKKyAgICAgICAgICAgICAgICBw YXJ0aXRpb25fc2NoZW1lICs9IHJvd1snZXhwcmVzc2lvbiddICsgJywgJworCisgICAgICAgICMg UmVtb3ZlIGV4dHJhIHNwYWNlIGFuZCBjb21tYQorICAgICAgICBpZiBsZW4oZGF0YVsncGFydGl0 aW9uX2tleXMnXSkgPiAwOgorICAgICAgICAgICAgcGFydGl0aW9uX3NjaGVtZSA9IHBhcnRpdGlv bl9zY2hlbWVbOi0yXQorICAgICAgICBwYXJ0aXRpb25fc2NoZW1lICs9ICcpJworCisgICAgICAg IHJldHVybiBwYXJ0aXRpb25fc2NoZW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHZh bGlkYXRlX2NvbnN0cmFpbnMoa2V5LCBkYXRhKToKKworICAgICAgICBpZiBrZXkgPT0gJ3ByaW1h cnlfa2V5JyBvciBrZXkgPT0gJ3VuaXF1ZV9jb25zdHJhaW50JzoKKyAgICAgICAgICAgIGlmICdj b2x1bW5zJyBpbiBkYXRhIGFuZCBsZW4oZGF0YVsnY29sdW1ucyddKSA+IDA6CisgICAgICAgICAg ICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0 dXJuIEZhbHNlCisgICAgICAgIGVsaWYga2V5ID09ICdmb3JlaWduX2tleSc6CisgICAgICAgICAg ICBpZiAnb2lkJyBub3QgaW4gZGF0YToKKyAgICAgICAgICAgICAgICBmb3IgYXJnIGluIFsnY29s dW1ucyddOgorICAgICAgICAgICAgICAgICAgICBpZiBhcmcgbm90IGluIGRhdGE6CisgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBp c2luc3RhbmNlKGRhdGFbYXJnXSwgbGlzdCkgYW5kIGxlbihkYXRhW2FyZ10pIDwgMToKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICAgICAgaWYgJ2F1 dG9pbmRleCcgaW4gZGF0YSBhbmQgZGF0YVsnYXV0b2luZGV4J10gYW5kIFwKKyAgICAgICAgICAg ICAgICAgICAgICAgICgnY292ZXJpbmdpbmRleCcgbm90IGluIGRhdGEgb3IKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnY292ZXJpbmdpbmRl eCddID09ICcnKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAg ICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZWxpZiBrZXkgPT0gJ2NoZWNrX2NvbnN0cmFpbnQn OgorICAgICAgICAgICAgZm9yIGFyZyBpbiBbJ2NvbnNyYyddOgorICAgICAgICAgICAgICAgIGlm IGFyZyBub3QgaW4gZGF0YSBvciBkYXRhW2FyZ10gPT0gJyc6CisgICAgICAgICAgICAgICAgICAg IHJldHVybiBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBlbGlmIGtl eSA9PSAnZXhjbHVkZV9jb25zdHJhaW50JzoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBy ZXR1cm4gVHJ1ZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjaGVja19hbmRfY29udmVy dF9uYW1lX3RvX3N0cmluZyhkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rp b24gd2lsbCBjaGVjayBhbmQgY292ZXJ0IHRhYmxlIHRvIHN0cmluZyBpbmNhc2UKKyAgICAgICAg aXQgaXMgbnVtZXJpYworCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBkYXRhOiBkYXRhIGRp Y3QKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVXBkYXRlZCBkYXRhIGRpY3QKKyAg ICAgICAgIiIiCisgICAgICAgICMgRm9yIFB5dGhvbjIsIGl0IGNhbiBiZSBpbnQsIGxvbmcsIGZs b2F0CisgICAgICAgIGlmIElTX1BZMiBhbmQgaGFzYXR0cihzdHIsICdkZWNvZGUnKToKKyAgICAg ICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YVsnbmFtZSddLCAoaW50LCBsb25nLCBmbG9hdCkpOgor ICAgICAgICAgICAgICAgIGRhdGFbJ25hbWUnXSA9IHN0cihkYXRhWyduYW1lJ10pCisgICAgICAg IGVsc2U6CisgICAgICAgICAgICAjIEZvciBQeXRob24zLCBpdCBjYW4gYmUgaW50LCBmbG9hdAor ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkYXRhWyduYW1lJ10sIChpbnQsIGZsb2F0KSk6Cisg ICAgICAgICAgICAgICAgZGF0YVsnbmFtZSddID0gc3RyKGRhdGFbJ25hbWUnXSkKKyAgICAgICAg cmV0dXJuIGRhdGEKKworICAgIGRlZiBnZXRfaW5kZXhfY29uc3RyYWludF9zcWwoc2VsZiwgZGlk LCB0aWQsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgIEFyZ3M6CisgICAgICAgICAgIHRp ZDogVGFibGUgSUQKKyAgICAgICAgICAgZGF0YTogZGF0YSBkaWN0IGNvbWluZyBmcm9tIHRoZSBj bGllbnQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2Vu ZXJhdGUgbW9kaWZpZWQgc3FsIGZvciBpbmRleCBjb25zdHJhaW50cworICAgICAgICAoUHJpbWFy eSBLZXkgJiBVbmlxdWUpCisgICAgICAgICIiIgorICAgICAgICBzcWwgPSBbXQorICAgICAgICAj IFdlIHdpbGwgZmV0Y2ggYWxsIHRoZSBpbmRleCBjb25zdHJhaW50cyBmb3IgdGhlIHRhYmxlCisg ICAgICAgIGluZGV4X2NvbnN0cmFpbnRzID0geworICAgICAgICAgICAgJ3AnOiAncHJpbWFyeV9r ZXknLCAndSc6ICd1bmlxdWVfY29uc3RyYWludCcKKyAgICAgICAgfQorCisgICAgICAgIGZvciBj dHlwZSBpbiBpbmRleF9jb25zdHJhaW50cy5rZXlzKCk6CisgICAgICAgICAgICAjIENoZWNrIGlm IGNvbnN0cmFpbnQgaXMgaW4gZGF0YQorICAgICAgICAgICAgIyBJZiB5ZXMgdGhlbiB3ZSBuZWVk IHRvIGNoZWNrIGZvciBhZGQvY2hhbmdlL2RlbGV0ZQorICAgICAgICAgICAgaWYgaW5kZXhfY29u c3RyYWludHNbY3R5cGVdIGluIGRhdGE6CisgICAgICAgICAgICAgICAgY29uc3RyYWludCA9IGRh dGFbaW5kZXhfY29uc3RyYWludHNbY3R5cGVdXQorICAgICAgICAgICAgICAgICMgSWYgY29uc3Ry YWludChzKSBpcy9hcmUgZGVsZXRlZAorICAgICAgICAgICAgICAgIGlmICdkZWxldGVkJyBpbiBj b25zdHJhaW50OgorICAgICAgICAgICAgICAgICAgICBmb3IgYyBpbiBjb25zdHJhaW50WydkZWxl dGVkJ106CisgICAgICAgICAgICAgICAgICAgICAgICBjWydzY2hlbWEnXSA9IGRhdGFbJ3NjaGVt YSddCisgICAgICAgICAgICAgICAgICAgICAgICBjWyd0YWJsZSddID0gZGF0YVsnbmFtZSddCisK KyAgICAgICAgICAgICAgICAgICAgICAgICMgU3FsIGZvciBkcm9wCisgICAgICAgICAgICAgICAg ICAgICAgICBzcWwuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcl90 ZW1wbGF0ZSgiLyIuam9pbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYu aW5kZXhfY29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRhdGE9YywgY29ubj1zZWxmLmNvbm4pLnN0cmlwKCdcbicpCisgICAgICAgICAgICAgICAgICAg ICAgICApCisKKyAgICAgICAgICAgICAgICBpZiAnY2hhbmdlZCcgaW4gY29uc3RyYWludDoKKyAg ICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gY29uc3RyYWludFsnY2hhbmdlZCddOgorICAgICAg ICAgICAgICAgICAgICAgICAgY1snc2NoZW1hJ10gPSBkYXRhWydzY2hlbWEnXQorICAgICAgICAg ICAgICAgICAgICAgICAgY1sndGFibGUnXSA9IGRhdGFbJ25hbWUnXQorCisgICAgICAgICAgICAg ICAgICAgICAgICBwcm9wZXJ0aWVzX3NxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZi5pbmRleF9jb25zdHJhaW50X3RlbXBsYXRl X3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk aWQ9ZGlkLCB0aWQ9dGlkLCBjaWQ9Y1snb2lkJ10sIGNvbnN0cmFpbnRfdHlwZT1jdHlwZSkKKyAg ICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGlj dChwcm9wZXJ0aWVzX3NxbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9kYXRhID0gcmVz Wydyb3dzJ11bMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICMgU3FsIHRvIHVwZGF0ZSBvYmpl Y3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHNxbC5hcHBlbmQoCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2VsZi5pbmRleF9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cGRhdGUuc3FsJ10pLCBkYXRhPWMsIG9fZGF0 YT1vbGRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubj1zZWxmLmNv bm4pLnN0cmlwKCdcbicpCisgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAg ICAgICBpZiAnYWRkZWQnIGluIGNvbnN0cmFpbnQ6CisgICAgICAgICAgICAgICAgICAgIGZvciBj IGluIGNvbnN0cmFpbnRbJ2FkZGVkJ106CisgICAgICAgICAgICAgICAgICAgICAgICBjWydzY2hl bWEnXSA9IGRhdGFbJ3NjaGVtYSddCisgICAgICAgICAgICAgICAgICAgICAgICBjWyd0YWJsZSdd ID0gZGF0YVsnbmFtZSddCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgU3FsIHRvIGFkZCBv YmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudmFsaWRhdGVfY29uc3RyYWlu cyhpbmRleF9jb25zdHJhaW50c1tjdHlwZV0sIGMpOgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNxbC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcl90 ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtz ZWxmLmluZGV4X2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnY3JlYXRlLnNxbCddKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRhdGE9YywgY29ubj1zZWxmLmNvbm4sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50X25hbWU9J1BSSU1BUlkgS0VZJwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY3R5cGUgPT0gJ3AnIGVsc2Ug J1VOSVFVRScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zdHJpcCgnXG4nKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVs c2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsLmFwcGVuZCgKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2V0dGV4dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICctLSBkZWZpbml0aW9uIGluY29tcGxldGUgZm9yIHswfSBjb25zdHJhaW50Jy5m b3JtYXQoaW5kZXhfY29uc3RyYWludHNbY3R5cGVdKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBpZiBsZW4o c3FsKSA+IDA6CisgICAgICAgICAgICAjIEpvaW4gYWxsIHRoZSBzcWwocykgYXMgc2luZ2xlIHN0 cmluZworICAgICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNxbCkKKyAgICAgICAgZWxzZToK KyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0X2ZvcmVpZ25fa2V5X3NxbChz ZWxmLCB0aWQsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgIEFyZ3M6CisgICAgICAgICAg IHRpZDogVGFibGUgSUQKKyAgICAgICAgICAgZGF0YTogZGF0YSBkaWN0IGNvbWluZyBmcm9tIHRo ZSBjbGllbnQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwg Z2VuZXJhdGUgbW9kaWZpZWQgc3FsIGZvciBmb3JlaWduIGtleQorICAgICAgICAiIiIKKyAgICAg ICAgc3FsID0gW10KKyAgICAgICAgIyBDaGVjayBpZiBjb25zdHJhaW50IGlzIGluIGRhdGEKKyAg ICAgICAgIyBJZiB5ZXMgdGhlbiB3ZSBuZWVkIHRvIGNoZWNrIGZvciBhZGQvY2hhbmdlL2RlbGV0 ZQorICAgICAgICBpZiAnZm9yZWlnbl9rZXknIGluIGRhdGE6CisgICAgICAgICAgICBjb25zdHJh aW50ID0gZGF0YVsnZm9yZWlnbl9rZXknXQorICAgICAgICAgICAgIyBJZiBjb25zdHJhaW50KHMp IGlzL2FyZSBkZWxldGVkCisgICAgICAgICAgICBpZiAnZGVsZXRlZCcgaW4gY29uc3RyYWludDoK KyAgICAgICAgICAgICAgICBmb3IgYyBpbiBjb25zdHJhaW50WydkZWxldGVkJ106CisgICAgICAg ICAgICAgICAgICAgIGNbJ3NjaGVtYSddID0gZGF0YVsnc2NoZW1hJ10KKyAgICAgICAgICAgICAg ICAgICAgY1sndGFibGUnXSA9IGRhdGFbJ25hbWUnXQorCisgICAgICAgICAgICAgICAgICAgICMg U3FsIGZvciBkcm9wCisgICAgICAgICAgICAgICAgICAgIHNxbC5hcHBlbmQoCisgICAgICAgICAg ICAgICAgICAgICAgICByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgW3NlbGYuZm9yZWlnbl9rZXlfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGF0YT1jLCBjb25uPXNlbGYuY29ubikuc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAg ICAgICAgKQorCisgICAgICAgICAgICBpZiAnY2hhbmdlZCcgaW4gY29uc3RyYWludDoKKyAgICAg ICAgICAgICAgICBmb3IgYyBpbiBjb25zdHJhaW50WydjaGFuZ2VkJ106CisgICAgICAgICAgICAg ICAgICAgIGNbJ3NjaGVtYSddID0gZGF0YVsnc2NoZW1hJ10KKyAgICAgICAgICAgICAgICAgICAg Y1sndGFibGUnXSA9IGRhdGFbJ25hbWUnXQorCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnRp ZXNfc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgICAgICAgICAg ICAgW3NlbGYuZm9yZWlnbl9rZXlfdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAor ICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCwgY2lkPWNbJ29pZCddKQorICAgICAgICAg ICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QocHJvcGVydGll c19zcWwpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKwor ICAgICAgICAgICAgICAgICAgICBvbGRfZGF0YSA9IHJlc1sncm93cyddWzBdCisgICAgICAgICAg ICAgICAgICAgICMgU3FsIHRvIHVwZGF0ZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgc3Fs LmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9p bihbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3JlaWduX2tleV90ZW1wbGF0 ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cGRhdGUuc3FsJ10pLCBkYXRh PWMsIG9fZGF0YT1vbGRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uPXNl bGYuY29ubikuc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAg ICAgICAgICAgIGlmIG5vdCBzZWxmLnZhbGlkYXRlX2NvbnN0cmFpbnMoJ2ZvcmVpZ25fa2V5Jywg Yyk6CisgICAgICAgICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdldHRleHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICct LSBkZWZpbml0aW9uIGluY29tcGxldGUgZm9yIGZvcmVpZ25fa2V5IGNvbnN0cmFpbnQnCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNxbCkKKworICAgICAgICAg ICAgICAgICAgICBpZiAnY29sdW1ucycgaW4gYzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv bHMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNvbCBpbiBjWydjb2x1bW5zJ106 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29scy5hcHBlbmQoY29sWydsb2NhbF9jb2x1 bW4nXSkKKworICAgICAgICAgICAgICAgICAgICAgICAgY292ZXJpbmdpbmRleCA9IHNlbGYuc2Vh cmNoX2NvdmVyaW5naW5kZXgodGlkLCBjb2xzKQorCisgICAgICAgICAgICAgICAgICAgICAgICBp ZiBjb3ZlcmluZ2luZGV4IGlzIE5vbmUgYW5kICdhdXRvaW5kZXgnIGluIGMgYW5kIGNbJ2F1dG9p bmRleCddIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnY292ZXJpbmdp bmRleCcgaW4gYyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y1snY292ZXJpbmdpbmRleCddICE9ICcnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz cWwuYXBwZW5kKHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIi8iLmpvaW4oW3NlbGYuZm9yZWlnbl9rZXlfdGVtcGxhdGVfcGF0aCwgJ2NyZWF0ZV9pbmRl eC5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9YywgY29ubj1z ZWxmLmNvbm4pLnN0cmlwKCdcbicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApCisKKyAgICAgICAgICAgIGlmICdhZGRlZCcgaW4gY29uc3RyYWludDoKKyAgICAgICAg ICAgICAgICBmb3IgYyBpbiBjb25zdHJhaW50WydhZGRlZCddOgorICAgICAgICAgICAgICAgICAg ICBjWydzY2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCisgICAgICAgICAgICAgICAgICAgIGNbJ3Rh YmxlJ10gPSBkYXRhWyduYW1lJ10KKworICAgICAgICAgICAgICAgICAgICAjIFNxbCB0byBhZGQg b2JqZWN0CisgICAgICAgICAgICAgICAgICAgICMgQ29sdW1ucworCisgICAgICAgICAgICAgICAg ICAgIGlmIG5vdCBzZWxmLnZhbGlkYXRlX2NvbnN0cmFpbnMoJ2ZvcmVpZ25fa2V5JywgYyk6Cisg ICAgICAgICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdldHRleHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLSBkZWZp bml0aW9uIGluY29tcGxldGUgZm9yIGZvcmVpZ25fa2V5IGNvbnN0cmFpbnQnCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNxbCkKKworICAgICAgICAgICAgICAg ICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuZm9yZWlnbl9rZXlfdGVt cGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnZ2V0X3BhcmVudC5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0aWQ9Y1snY29sdW1ucyddWzBdWydyZWZlcmVuY2VzJ10pCisgICAgICAg ICAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FM KQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQorCisgICAg ICAgICAgICAgICAgICAgIGNbJ3JlbW90ZV9zY2hlbWEnXSA9IHJzZXRbJ3Jvd3MnXVswXVsnc2No ZW1hJ10KKyAgICAgICAgICAgICAgICAgICAgY1sncmVtb3RlX3RhYmxlJ10gPSByc2V0Wydyb3dz J11bMF1bJ3RhYmxlJ10KKworICAgICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKAorICAgICAg ICAgICAgICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICIvIi5qb2luKFtzZWxmLmZvcmVpZ25fa2V5X3RlbXBsYXRlX3BhdGgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGUuc3FsJ10pLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRhdGE9YywgY29ubj1zZWxmLmNvbm4KKyAgICAgICAgICAgICAg ICAgICAgICAgICkuc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAg ICAgICAgICAgICAgIGlmIGNbJ2F1dG9pbmRleCddOgorICAgICAgICAgICAgICAgICAgICAgICAg c3FsLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfdGVtcGxhdGUo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLmZvcmVpZ25f a2V5X3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnY3JlYXRlX2luZGV4LnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGF0YT1jLCBjb25uPXNlbGYuY29ubikuc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAg ICAgICAgICkKKworICAgICAgICBpZiBsZW4oc3FsKSA+IDA6CisgICAgICAgICAgICAjIEpvaW4g YWxsIHRoZSBzcWwocykgYXMgc2luZ2xlIHN0cmluZworICAgICAgICAgICAgcmV0dXJuICdcblxu Jy5qb2luKHNxbCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAg ICBkZWYgZ2V0X2NoZWNrX2NvbnN0cmFpbnRfc3FsKHNlbGYsIHRpZCwgZGF0YSk6CisgICAgICAg ICIiIgorICAgICAgICAgQXJnczoKKyAgICAgICAgICAgdGlkOiBUYWJsZSBJRAorICAgICAgICAg ICBkYXRhOiBkYXRhIGRpY3QgY29taW5nIGZyb20gdGhlIGNsaWVudAorCisgICAgICAgIFJldHVy bnM6CisgICAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGdlbmVyYXRlIG1vZGlmaWVkIHNxbCBm b3IgY2hlY2sgY29uc3RyYWludAorICAgICAgICAiIiIKKyAgICAgICAgc3FsID0gW10KKyAgICAg ICAgIyBDaGVjayBpZiBjb25zdHJhaW50IGlzIGluIGRhdGEKKyAgICAgICAgIyBJZiB5ZXMgdGhl biB3ZSBuZWVkIHRvIGNoZWNrIGZvciBhZGQvY2hhbmdlL2RlbGV0ZQorICAgICAgICBpZiAnY2hl Y2tfY29uc3RyYWludCcgaW4gZGF0YToKKyAgICAgICAgICAgIGNvbnN0cmFpbnQgPSBkYXRhWydj aGVja19jb25zdHJhaW50J10KKyAgICAgICAgICAgICMgSWYgY29uc3RyYWludChzKSBpcy9hcmUg ZGVsZXRlZAorICAgICAgICAgICAgaWYgJ2RlbGV0ZWQnIGluIGNvbnN0cmFpbnQ6CisgICAgICAg ICAgICAgICAgZm9yIGMgaW4gY29uc3RyYWludFsnZGVsZXRlZCddOgorICAgICAgICAgICAgICAg ICAgICBjWydzY2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCisgICAgICAgICAgICAgICAgICAgIGNb J3RhYmxlJ10gPSBkYXRhWyduYW1lJ10KKworICAgICAgICAgICAgICAgICAgICAjIFNxbCBmb3Ig ZHJvcAorICAgICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKAorICAgICAgICAgICAgICAgICAg ICAgICAgcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFtzZWxmLmNoZWNrX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGF0YT1jLCBjb25uPXNlbGYuY29ubikuc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAg ICAgKQorCisgICAgICAgICAgICBpZiAnY2hhbmdlZCcgaW4gY29uc3RyYWludDoKKyAgICAgICAg ICAgICAgICBmb3IgYyBpbiBjb25zdHJhaW50WydjaGFuZ2VkJ106CisgICAgICAgICAgICAgICAg ICAgIGNbJ3NjaGVtYSddID0gZGF0YVsnc2NoZW1hJ10KKyAgICAgICAgICAgICAgICAgICAgY1sn dGFibGUnXSA9IGRhdGFbJ25hbWUnXQorCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNf c3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgICAgICAgICAgICAg W3NlbGYuY2hlY2tfY29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwnXSks CisgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkLCBjaWQ9Y1snb2lkJ10pCisgICAgICAg ICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChwcm9wZXJ0 aWVzX3NxbCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQor CisgICAgICAgICAgICAgICAgICAgIG9sZF9kYXRhID0gcmVzWydyb3dzJ11bMF0KKyAgICAgICAg ICAgICAgICAgICAgIyBTcWwgdG8gdXBkYXRlIG9iamVjdAorICAgICAgICAgICAgICAgICAgICBz cWwuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2NvbnN0cmFpbnRf dGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXBkYXRlLnNxbCdd KSwgZGF0YT1jLCBvX2RhdGE9b2xkX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29ubj1zZWxmLmNvbm4pLnN0cmlwKCdcbicpCisgICAgICAgICAgICAgICAgICAgICkKKworICAg ICAgICAgICAgaWYgJ2FkZGVkJyBpbiBjb25zdHJhaW50OgorICAgICAgICAgICAgICAgIGZvciBj IGluIGNvbnN0cmFpbnRbJ2FkZGVkJ106CisgICAgICAgICAgICAgICAgICAgIGNbJ3NjaGVtYSdd ID0gZGF0YVsnc2NoZW1hJ10KKyAgICAgICAgICAgICAgICAgICAgY1sndGFibGUnXSA9IGRhdGFb J25hbWUnXQorCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnZhbGlkYXRlX2NvbnN0 cmFpbnMoJ2NoZWNrX2NvbnN0cmFpbnQnLCBjKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNx bC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGV4dCgKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJy0tIGRlZmluaXRpb24gaW5jb21wbGV0ZSBmb3IgY2hl Y2tfY29uc3RyYWludCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAg ICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xuXG4nLmpv aW4oc3FsKQorCisgICAgICAgICAgICAgICAgICAgIHNxbC5hcHBlbmQoCisgICAgICAgICAgICAg ICAgICAgICAgICByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ii8iLmpvaW4oW3NlbGYuY2hlY2tfY29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3JlYXRlLnNxbCddKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhPWMsIGNvbm49c2VsZi5jb25uCisgICAgICAgICAgICAgICAg ICAgICAgICApLnN0cmlwKCdcbicpCisgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBp ZiBsZW4oc3FsKSA+IDA6CisgICAgICAgICAgICAjIEpvaW4gYWxsIHRoZSBzcWwocykgYXMgc2lu Z2xlIHN0cmluZworICAgICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNxbCkKKyAgICAgICAg ZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0X2V4Y2x1c2lvbl9j b25zdHJhaW50X3NxbChzZWxmLCBkaWQsIHRpZCwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAg ICAgQXJnczoKKyAgICAgICAgICAgdGlkOiBUYWJsZSBJRAorICAgICAgICAgICBkYXRhOiBkYXRh IGRpY3QgY29taW5nIGZyb20gdGhlIGNsaWVudAorCisgICAgICAgIFJldHVybnM6CisgICAgICAg ICAgVGhpcyBmdW5jdGlvbiB3aWxsIGdlbmVyYXRlIG1vZGlmaWVkIHNxbCBmb3IgZXhjbHVzaW9u IGNvbnN0cmFpbnQKKyAgICAgICAgIiIiCisgICAgICAgIHNxbCA9IFtdCisgICAgICAgICMgQ2hl Y2sgaWYgY29uc3RyYWludCBpcyBpbiBkYXRhCisgICAgICAgICMgSWYgeWVzIHRoZW4gd2UgbmVl ZCB0byBjaGVjayBmb3IgYWRkL2NoYW5nZS9kZWxldGUKKyAgICAgICAgaWYgJ2V4Y2x1ZGVfY29u c3RyYWludCcgaW4gZGF0YToKKyAgICAgICAgICAgIGNvbnN0cmFpbnQgPSBkYXRhWydleGNsdWRl X2NvbnN0cmFpbnQnXQorICAgICAgICAgICAgIyBJZiBjb25zdHJhaW50KHMpIGlzL2FyZSBkZWxl dGVkCisgICAgICAgICAgICBpZiAnZGVsZXRlZCcgaW4gY29uc3RyYWludDoKKyAgICAgICAgICAg ICAgICBmb3IgYyBpbiBjb25zdHJhaW50WydkZWxldGVkJ106CisgICAgICAgICAgICAgICAgICAg IGNbJ3NjaGVtYSddID0gZGF0YVsnc2NoZW1hJ10KKyAgICAgICAgICAgICAgICAgICAgY1sndGFi bGUnXSA9IGRhdGFbJ25hbWUnXQorCisgICAgICAgICAgICAgICAgICAgICMgU3FsIGZvciBkcm9w CisgICAgICAgICAgICAgICAgICAgIHNxbC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAg ICByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg W3NlbGYuZXhjbHVzaW9uX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGF0YT1jLCBjb25uPXNlbGYuY29ubikuc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAg ICAgKQorCisgICAgICAgICAgICBpZiAnY2hhbmdlZCcgaW4gY29uc3RyYWludDoKKyAgICAgICAg ICAgICAgICBmb3IgYyBpbiBjb25zdHJhaW50WydjaGFuZ2VkJ106CisgICAgICAgICAgICAgICAg ICAgIGNbJ3NjaGVtYSddID0gZGF0YVsnc2NoZW1hJ10KKyAgICAgICAgICAgICAgICAgICAgY1sn dGFibGUnXSA9IGRhdGFbJ25hbWUnXQorCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNf c3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgICAgICAgICAgICAg W3NlbGYuZXhjbHVzaW9uX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3Fs J10pLAorICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRpZCwgdGlkPXRpZCwgY2lkPWNbJ29p ZCddKQorICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRl X2RpY3QocHJvcGVydGllc19zcWwpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6 CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVy cm9ybXNnPXJlcykKKworICAgICAgICAgICAgICAgICAgICBvbGRfZGF0YSA9IHJlc1sncm93cydd WzBdCisgICAgICAgICAgICAgICAgICAgICMgU3FsIHRvIHVwZGF0ZSBvYmplY3QKKyAgICAgICAg ICAgICAgICAgICAgc3FsLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcl90 ZW1wbGF0ZSgiLyIuam9pbihbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leGNs dXNpb25fY29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICd1cGRhdGUuc3FsJ10pLCBkYXRhPWMsIG9fZGF0YT1vbGRfZGF0YSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25uPXNlbGYuY29ubikuc3RyaXAoJ1xuJykKKyAgICAgICAgICAg ICAgICAgICAgKQorCisgICAgICAgICAgICBpZiAnYWRkZWQnIGluIGNvbnN0cmFpbnQ6CisgICAg ICAgICAgICAgICAgZm9yIGMgaW4gY29uc3RyYWludFsnYWRkZWQnXToKKyAgICAgICAgICAgICAg ICAgICAgY1snc2NoZW1hJ10gPSBkYXRhWydzY2hlbWEnXQorICAgICAgICAgICAgICAgICAgICBj Wyd0YWJsZSddID0gZGF0YVsnbmFtZSddCisKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNl bGYudmFsaWRhdGVfY29uc3RyYWlucygnZXhjbHVkZV9jb25zdHJhaW50JywgYyk6CisgICAgICAg ICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdldHRleHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLSBkZWZpbml0aW9u IGluY29tcGxldGUgZm9yIGV4Y2x1c2lvbl9jb25zdHJhaW50JworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAnXG5cbicuam9pbihzcWwpCisKKyAgICAgICAgICAgICAgICAgICAgc3Fs LmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5leGNsdXNpb25fY29uc3RyYWlu dF90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn Y3JlYXRlLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWMsIGNvbm49 c2VsZi5jb25uCisgICAgICAgICAgICAgICAgICAgICAgICApLnN0cmlwKCdcbicpCisgICAgICAg ICAgICAgICAgICAgICkKKworICAgICAgICBpZiBsZW4oc3FsKSA+IDA6CisgICAgICAgICAgICAj IEpvaW4gYWxsIHRoZSBzcWwocykgYXMgc2luZ2xlIHN0cmluZworICAgICAgICAgICAgcmV0dXJu IHUnXG5cbicuam9pbihzcWwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9u ZQorCisgICAgZGVmIGdldF9zcWwoc2VsZiwgZGlkLCBzY2lkLCB0aWQsIGRhdGEsIHJlcyk6Cisg ICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2VuZXJhdGUgY3JlYXRlL3Vw ZGF0ZSBzcWwgZnJvbSBtb2RlbCBkYXRhCisgICAgICAgIGNvbWluZyBmcm9tIGNsaWVudAorICAg ICAgICAiIiIKKyAgICAgICAgaWYgdGlkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb2xkX2Rh dGEgPSByZXNbJ3Jvd3MnXVswXQorICAgICAgICAgICAgb2xkX2RhdGEgPSBzZWxmLl9mb3JtYXR0 ZXIoZGlkLCBzY2lkLCB0aWQsIG9sZF9kYXRhKQorCisgICAgICAgICAgICAjIFdlIHdpbGwgY29u dmVydCBwcml2aWxlZ2VzIGNvbWluZyBmcm9tIGNsaWVudCByZXF1aXJlZAorICAgICAgICAgICAg aWYgJ3JlbGFjbCcgaW4gZGF0YToKKyAgICAgICAgICAgICAgICBmb3IgbW9kZSBpbiBbJ2FkZGVk JywgJ2NoYW5nZWQnLCAnZGVsZXRlZCddOgorICAgICAgICAgICAgICAgICAgICBpZiBtb2RlIGlu IGRhdGFbJ3JlbGFjbCddOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsncmVsYWNsJ11b bW9kZV0gPSBwYXJzZV9wcml2X3RvX2RiKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh dGFbJ3JlbGFjbCddW21vZGVdLCBzZWxmLmFjbAorICAgICAgICAgICAgICAgICAgICAgICAgKQor CisgICAgICAgICAgICAjIElmIG5hbWUgaXMgbm90IHByZXNlbnQgaW4gcmVxdWVzdCBkYXRhCisg ICAgICAgICAgICBpZiAnbmFtZScgbm90IGluIGRhdGE6CisgICAgICAgICAgICAgICAgZGF0YVsn bmFtZSddID0gb2xkX2RhdGFbJ25hbWUnXQorCisgICAgICAgICAgICBkYXRhID0gQmFzZVRhYmxl Vmlldy5jaGVja19hbmRfY29udmVydF9uYW1lX3RvX3N0cmluZyhkYXRhKQorCisgICAgICAgICAg ICAjIElmIG5hbWUgaWYgbm90IHByZXNlbnQKKyAgICAgICAgICAgIGlmICdzY2hlbWEnIG5vdCBp biBkYXRhOgorICAgICAgICAgICAgICAgIGRhdGFbJ3NjaGVtYSddID0gb2xkX2RhdGFbJ3NjaGVt YSddCisKKyAgICAgICAgICAgICMgRmlsdGVyIG91dCBuZXcgdGFibGVzIGZyb20gbGlzdCwgd2Ug d2lsbCBzZW5kIGNvbXBsZXRlIGxpc3QKKyAgICAgICAgICAgICMgYW5kIG5vdCBuZXdseSBhZGRl ZCB0YWJsZXMgaW4gdGhlIGxpc3QgZnJvbSBjbGllbnQKKyAgICAgICAgICAgICMgc28gd2Ugd2ls bCBmaWx0ZXIgbmV3IHRhYmxlcyBoZXJlCisgICAgICAgICAgICBpZiAnY29sbF9pbmhlcml0cycg aW4gZGF0YToKKyAgICAgICAgICAgICAgICBwX2xlbiA9IGxlbihvbGRfZGF0YVsnY29sbF9pbmhl cml0cyddKQorICAgICAgICAgICAgICAgIGNfbGVuID0gbGVuKGRhdGFbJ2NvbGxfaW5oZXJpdHMn XSkKKyAgICAgICAgICAgICAgICAjIElmIHRhYmxlKHMpIGFkZGVkCisgICAgICAgICAgICAgICAg aWYgY19sZW4gPiBwX2xlbjoKKyAgICAgICAgICAgICAgICAgICAgZGF0YVsnY29sbF9pbmhlcml0 c19hZGRlZCddID0gbGlzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldChkYXRhWydjb2xs X2luaGVyaXRzJ10pIC0gc2V0KG9sZF9kYXRhWydjb2xsX2luaGVyaXRzJ10pCisgICAgICAgICAg ICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAjIElmIHRhYmxlKHMpcmVtb3ZlZAorICAgICAg ICAgICAgICAgIGVsaWYgY19sZW4gPCBwX2xlbjoKKyAgICAgICAgICAgICAgICAgICAgZGF0YVsn Y29sbF9pbmhlcml0c19yZW1vdmVkJ10gPSBsaXN0KAorICAgICAgICAgICAgICAgICAgICAgICAg c2V0KG9sZF9kYXRhWydjb2xsX2luaGVyaXRzJ10pIC0gc2V0KGRhdGFbJ2NvbGxfaW5oZXJpdHMn XSkKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICMgU2FmZSBzaWRlIHZl cmlmaWNhdGlvbixJbiBjYXNlIGl0IGhhcHBlbnMuLgorICAgICAgICAgICAgICAgICMgSWYgdXNl ciByZW1vdmVzIGFuZCBhZGRzIHNhbWUgbnVtYmVyIG9mIHRhYmxlCisgICAgICAgICAgICAgICAg IyBlZyByZW1vdmVkIG9uZSB0YWJsZSBhbmQgYWRkZWQgb25lIG5ldyB0YWJsZQorICAgICAgICAg ICAgICAgIGVsaWYgY19sZW4gPT0gcF9sZW46CisgICAgICAgICAgICAgICAgICAgIGRhdGFbJ2Nv bGxfaW5oZXJpdHNfYWRkZWQnXSA9IGxpc3QoCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQo ZGF0YVsnY29sbF9pbmhlcml0cyddKSAtIHNldChvbGRfZGF0YVsnY29sbF9pbmhlcml0cyddKQor ICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgIGRhdGFbJ2NvbGxfaW5o ZXJpdHNfcmVtb3ZlZCddID0gbGlzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldChvbGRf ZGF0YVsnY29sbF9pbmhlcml0cyddKSAtIHNldChkYXRhWydjb2xsX2luaGVyaXRzJ10pCisgICAg ICAgICAgICAgICAgICAgICkKKworICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsICd1cGRhdGUuc3FsJ10pLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9fZGF0YT1vbGRfZGF0YSwgZGF0YT1kYXRhLCBj b25uPXNlbGYuY29ubikKKyAgICAgICAgICAgICMgUmVtb3ZlcyB0cmFpbmluZyBuZXcgbGluZXMK KyAgICAgICAgICAgIFNRTCA9IFNRTC5zdHJpcCgnXG4nKSArICdcblxuJworCisgICAgICAgICAg ICAjIFBhcnNlL0Zvcm1hdCBjb2x1bW5zICYgY3JlYXRlIHNxbAorICAgICAgICAgICAgaWYgJ2Nv bHVtbnMnIGluIGRhdGE6CisgICAgICAgICAgICAgICAgIyBQYXJzZSB0aGUgZGF0YSBjb21pbmcg ZnJvbSBjbGllbnQKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcGFyc2VfZm9ybWF0X2Nv bHVtbnMoZGF0YSwgbW9kZT0nZWRpdCcpCisKKyAgICAgICAgICAgICAgICBjb2x1bW5zID0gZGF0 YVsnY29sdW1ucyddCisgICAgICAgICAgICAgICAgY29sdW1uX3NxbCA9ICdcbicKKworICAgICAg ICAgICAgICAgICMgSWYgY29sdW1uKHMpIGlzL2FyZSBkZWxldGVkCisgICAgICAgICAgICAgICAg aWYgJ2RlbGV0ZWQnIGluIGNvbHVtbnM6CisgICAgICAgICAgICAgICAgICAgIGZvciBjIGluIGNv bHVtbnNbJ2RlbGV0ZWQnXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNbJ3NjaGVtYSddID0g ZGF0YVsnc2NoZW1hJ10KKyAgICAgICAgICAgICAgICAgICAgICAgIGNbJ3RhYmxlJ10gPSBkYXRh WyduYW1lJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICMgU3FsIGZvciBkcm9wIGNvbHVtbgor ICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ2luaGVyaXRlZGZyb20nIG5vdCBpbiBjOgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl9zcWwgKz0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZi5jb2x1bW5fdGVt cGxhdGVfcGF0aCwgJ2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRhdGE9YywgY29ubj1zZWxmLmNvbm4pLnN0cmlwKCdcbicpICsgJ1xuXG4nCisKKyAgICAg ICAgICAgICAgICAjIElmIGNvbHVtbihzKSBpcy9hcmUgY2hhbmdlZAorICAgICAgICAgICAgICAg ICMgSGVyZSB3ZSB3aWxsIGJlIG5lZWRpbmcgcHJldmlvdXMgcHJvcGVydGllcyBvZiBjb2x1bW4K KyAgICAgICAgICAgICAgICAjIHNvIHRoYXQgd2UgY2FuIGNvbXBhcmUgJiB1cGRhdGUgaXQKKyAg ICAgICAgICAgICAgICBpZiAnY2hhbmdlZCcgaW4gY29sdW1uczoKKyAgICAgICAgICAgICAgICAg ICAgZm9yIGMgaW4gY29sdW1uc1snY2hhbmdlZCddOgorICAgICAgICAgICAgICAgICAgICAgICAg Y1snc2NoZW1hJ10gPSBkYXRhWydzY2hlbWEnXQorICAgICAgICAgICAgICAgICAgICAgICAgY1sn dGFibGUnXSA9IGRhdGFbJ25hbWUnXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ2F0dGFj bCcgaW4gYzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWydhdHRhY2wnXSA9IHBhcnNl X3ByaXZfdG9fZGIoY1snYXR0YWNsJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sdW1uX2FjbCkKKworICAgICAgICAg ICAgICAgICAgICAgICAgcHJvcGVydGllc19zcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4o W3NlbGYuY29sdW1uX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10p LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGlkPXRpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNsaWQ9Y1snYXR0bnVtJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93X3N5c19vYmplY3RzPXNlbGYuYmx1 ZXByaW50LnNob3dfc3lzdGVtX29iamVjdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICAgICAgICAgICAgICAgICAg c3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KHByb3BlcnRpZXNfc3FsKQorICAg ICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKyAgICAg ICAgICAgICAgICAgICAgICAgIG9sZF9kYXRhID0gcmVzWydyb3dzJ11bMF0KKworICAgICAgICAg ICAgICAgICAgICAgICAgb2xkX2RhdGFbJ2NsdHlwZSddLCBvbGRfZGF0YVsnaGFzU3FyQnJhY2tl dCddID0gc2VsZi5fY2x0eXBlX2Zvcm1hdHRlcihvbGRfZGF0YVsnY2x0eXBlJ10pCisgICAgICAg ICAgICAgICAgICAgICAgICBvbGRfZGF0YSA9IEJhc2VUYWJsZVZpZXcuY29udmVydF9sZW5ndGhf cHJlY2lzaW9uX3RvX3N0cmluZyhvbGRfZGF0YSkKKworICAgICAgICAgICAgICAgICAgICAgICAg ZnVsbHR5cGUgPSBzZWxmLmdldF9mdWxsX3R5cGUoCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb2xkX2RhdGFbJ3R5cG5zcG5hbWUnXSwgb2xkX2RhdGFbJ3R5cG5hbWUnXSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvbGRfZGF0YVsnaXNkdXAnXSwgb2xkX2RhdGFbJ2F0dG5kaW1z J10sIG9sZF9kYXRhWydhdHR0eXBtb2QnXQorICAgICAgICAgICAgICAgICAgICAgICAgKQorCisg ICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGhhdmUgbGVuZ3RoICYgcHJlY2lzaW9uIGJv dGgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoT2JqID0gcmUuc2VhcmNoKHInKFxkKyks KFxkKyknLCBmdWxsdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1hdGNoT2JqOgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9kYXRhWydhdHRsZW4nXSA9IGludChtYXRj aE9iai5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfZGF0YVsnYXR0 cHJlY2lzaW9uJ10gPSBpbnQobWF0Y2hPYmouZ3JvdXAoMikpCisgICAgICAgICAgICAgICAgICAg ICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgd2UgaGF2ZSBsZW5n dGggb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoT2JqID0gcmUuc2VhcmNo KHInKFxkKyknLCBmdWxsdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtYXRj aE9iajoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2RhdGFbJ2F0dGxlbidd ID0gaW50KG1hdGNoT2JqLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvbGRfZGF0YVsnYXR0cHJlY2lzaW9uJ10gPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2RhdGFbJ2F0 dGxlbiddID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfZGF0YVsn YXR0cHJlY2lzaW9uJ10gPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9kYXRh WydjbHR5cGUnXSA9IERhdGFUeXBlUmVhZGVyLnBhcnNlX3R5cGVfbmFtZShvbGRfZGF0YVsnY2x0 eXBlJ10pCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgU3FsIGZvciBhbHRlciBjb2x1bW4K KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICdpbmhlcml0ZWRmcm9tJyBub3QgaW4gYzoKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5fc3FsICs9IHJlbmRlcl90ZW1wbGF0ZSgi LyIuam9pbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYuY29sdW1uX3Rl bXBsYXRlX3BhdGgsICd1cGRhdGUuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkYXRhPWMsIG9fZGF0YT1vbGRfZGF0YSwgY29ubj1zZWxmLmNvbm4pLnN0cmlwKCdcbicp ICsgJ1xuXG4nCisKKyAgICAgICAgICAgICAgICAjIElmIGNvbHVtbihzKSBpcy9hcmUgYWRkZWQK KyAgICAgICAgICAgICAgICBpZiAnYWRkZWQnIGluIGNvbHVtbnM6CisgICAgICAgICAgICAgICAg ICAgIGZvciBjIGluIGNvbHVtbnNbJ2FkZGVkJ106CisgICAgICAgICAgICAgICAgICAgICAgICBj WydzY2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCisgICAgICAgICAgICAgICAgICAgICAgICBjWyd0 YWJsZSddID0gZGF0YVsnbmFtZSddCisgICAgICAgICAgICAgICAgICAgICAgICAjIFNxbCBmb3Ig Y3JlYXRlIGNvbHVtbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ2F0dGFjbCcgaW4gYzoK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjWydhdHRhY2wnXSA9IHBhcnNlX3ByaXZfdG9f ZGIoY1snYXR0YWNsJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNlbGYuY29sdW1uX2FjbCkKKworICAgICAgICAgICAgICAgICAg ICAgICAgYyA9IEJhc2VUYWJsZVZpZXcuY29udmVydF9sZW5ndGhfcHJlY2lzaW9uX3RvX3N0cmlu ZyhjKQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnaW5oZXJpdGVkZnJvbScgbm90IGlu IGM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uX3NxbCArPSByZW5kZXJfdGVt cGxhdGUoIi8iLmpvaW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxmLmNv bHVtbl90ZW1wbGF0ZV9wYXRoLCAnY3JlYXRlLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGF0YT1jLCBjb25uPXNlbGYuY29ubikuc3RyaXAoJ1xuJykgKyAnXG5cbicK KworICAgICAgICAgICAgICAgICMgQ29tYmluZSBhbGwgdGhlIFNRTCB0b2dldGhlcgorICAgICAg ICAgICAgICAgIFNRTCArPSBjb2x1bW5fc3FsLnN0cmlwKCdcbicpCisKKyAgICAgICAgICAgICMg Q2hlY2sgZm9yIHBhcnRpdGlvbnMKKyAgICAgICAgICAgIGlmICdwYXJ0aXRpb25zJyBpbiBkYXRh OgorICAgICAgICAgICAgICAgIHBhcnRpdGlvbnMgPSBkYXRhWydwYXJ0aXRpb25zJ10KKyAgICAg ICAgICAgICAgICBwYXJ0aXRpb25zX3NxbCA9ICdcbicKKworICAgICAgICAgICAgICAgICMgSWYg cGFydGl0aW9uKHMpIGlzL2FyZSBkZWxldGVkCisgICAgICAgICAgICAgICAgaWYgJ2RlbGV0ZWQn IGluIHBhcnRpdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIGZvciByb3cgaW4gcGFydGl0aW9u c1snZGVsZXRlZCddOgorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhID0gZGljdCgp CisgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfbmFtZSwgdGFibGVfbmFtZSA9IFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldF9zY2hlbWFfYW5kX3RhYmxlX25hbWUo cm93WydvaWQnXSkKKworICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhWydwYXJlbnRf c2NoZW1hJ10gPSBkYXRhWydzY2hlbWEnXQorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9k YXRhWydwYXJ0aXRpb25lZF90YWJsZV9uYW1lJ10gPSBkYXRhWyduYW1lJ10KKyAgICAgICAgICAg ICAgICAgICAgICAgIHRlbXBfZGF0YVsnc2NoZW1hJ10gPSBzY2hlbWFfbmFtZQorICAgICAgICAg ICAgICAgICAgICAgICAgdGVtcF9kYXRhWyduYW1lJ10gPSB0YWJsZV9uYW1lCisKKyAgICAgICAg ICAgICAgICAgICAgICAgICMgU3FsIGZvciBkZXRhY2ggcGFydGl0aW9uCisgICAgICAgICAgICAg ICAgICAgICAgICBwYXJ0aXRpb25zX3NxbCArPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYucGFydGl0aW9uX3RlbXBsYXRlX3BhdGgs ICdkZXRhY2guc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9dGVtcF9k YXRhLCBjb25uPXNlbGYuY29ubikuc3RyaXAoJ1xuJykgKyAnXG5cbicKKworICAgICAgICAgICAg ICAgICMgSWYgcGFydGl0aW9uKHMpIGlzL2FyZSBhZGRlZAorICAgICAgICAgICAgICAgIGlmICdh ZGRlZCcgaW4gcGFydGl0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhID0gZGlj dCgpCisgICAgICAgICAgICAgICAgICAgIHRlbXBfZGF0YVsnc2NoZW1hJ10gPSBkYXRhWydzY2hl bWEnXQorICAgICAgICAgICAgICAgICAgICB0ZW1wX2RhdGFbJ25hbWUnXSA9IGRhdGFbJ25hbWUn XQorICAgICAgICAgICAgICAgICAgICAjIGdldCB0aGUgcGFydGl0aW9uIHR5cGUKKyAgICAgICAg ICAgICAgICAgICAgdGVtcF9kYXRhWydwYXJ0aXRpb25fdHlwZSddID0gXAorICAgICAgICAgICAg ICAgICAgICAgICAgb2xkX2RhdGFbJ3BhcnRpdGlvbl9zY2hlbWUnXS5zcGxpdCgpWzBdLmxvd2Vy KCkKKyAgICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhWydwYXJ0aXRpb25zJ10gPSBwYXJ0aXRp b25zWydhZGRlZCddCisKKyAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uc19zcWwgKz0gXAor ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRfcGFydGl0aW9uc19zcWwodGVtcF9kYXRh KS5zdHJpcCgnXG4nKSArICdcblxuJworCisgICAgICAgICAgICAgICAgIyBDb21iaW5lIGFsbCB0 aGUgU1FMIHRvZ2V0aGVyCisgICAgICAgICAgICAgICAgU1FMICs9IHBhcnRpdGlvbnNfc3FsLnN0 cmlwKCdcbicpCisKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgaW5kZXggY29uc3RyYWludHMgYXJl IGFkZGVkL2NoYW5nZWQvZGVsZXRlZAorICAgICAgICAgICAgaW5kZXhfY29uc3RyYWludF9zcWwg PSBzZWxmLmdldF9pbmRleF9jb25zdHJhaW50X3NxbChkaWQsIHRpZCwgZGF0YSkKKyAgICAgICAg ICAgICMgSWYgd2UgaGF2ZSBpbmRleCBjb25zdHJhaW50IHNxbCB0aGVuIGFkIGl0IGluIG1haW4g c3FsCisgICAgICAgICAgICBpZiBpbmRleF9jb25zdHJhaW50X3NxbCBpcyBub3QgTm9uZToKKyAg ICAgICAgICAgICAgICBTUUwgKz0gJ1xuJyArIGluZGV4X2NvbnN0cmFpbnRfc3FsCisKKyAgICAg ICAgICAgICMgQ2hlY2sgaWYgZm9yZWlnbiBrZXkocykgaXMvYXJlIGFkZGVkL2NoYW5nZWQvZGVs ZXRlZAorICAgICAgICAgICAgZm9yZWlnbl9rZXlfc3FsID0gc2VsZi5nZXRfZm9yZWlnbl9rZXlf c3FsKHRpZCwgZGF0YSkKKyAgICAgICAgICAgICMgSWYgd2UgaGF2ZSBmb3JlaWduIGtleSBzcWwg dGhlbiBhZCBpdCBpbiBtYWluIHNxbAorICAgICAgICAgICAgaWYgZm9yZWlnbl9rZXlfc3FsIGlz IG5vdCBOb25lOgorICAgICAgICAgICAgICAgIFNRTCArPSAnXG4nICsgZm9yZWlnbl9rZXlfc3Fs CisKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgY2hlY2sgY29uc3RyYWludChzKSBpcy9hcmUgYWRk ZWQvY2hhbmdlZC9kZWxldGVkCisgICAgICAgICAgICBjaGVja19jb25zdHJhaW50X3NxbCA9IHNl bGYuZ2V0X2NoZWNrX2NvbnN0cmFpbnRfc3FsKHRpZCwgZGF0YSkKKyAgICAgICAgICAgICMgSWYg d2UgaGF2ZSBjaGVjayBjb25zdHJhaW50IHNxbCB0aGVuIGFkIGl0IGluIG1haW4gc3FsCisgICAg ICAgICAgICBpZiBjaGVja19jb25zdHJhaW50X3NxbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAg ICAgICBTUUwgKz0gJ1xuJyArIGNoZWNrX2NvbnN0cmFpbnRfc3FsCisKKyAgICAgICAgICAgICMg Q2hlY2sgaWYgZXhjbHVzaW9uIGNvbnN0cmFpbnQocykgaXMvYXJlIGFkZGVkL2NoYW5nZWQvZGVs ZXRlZAorICAgICAgICAgICAgZXhjbHVzaW9uX2NvbnN0cmFpbnRfc3FsID0gc2VsZi5nZXRfZXhj bHVzaW9uX2NvbnN0cmFpbnRfc3FsKGRpZCwgdGlkLCBkYXRhKQorICAgICAgICAgICAgIyBJZiB3 ZSBoYXZlIGNoZWNrIGNvbnN0cmFpbnQgc3FsIHRoZW4gYWQgaXQgaW4gbWFpbiBzcWwKKyAgICAg ICAgICAgIGlmIGV4Y2x1c2lvbl9jb25zdHJhaW50X3NxbCBpcyBub3QgTm9uZToKKyAgICAgICAg ICAgICAgICBTUUwgKz0gJ1xuJyArIGV4Y2x1c2lvbl9jb25zdHJhaW50X3NxbAorCisgICAgICAg IGVsc2U6CisgICAgICAgICAgICByZXMgPSBOb25lCisgICAgICAgICAgICByZXF1aXJlZF9hcmdz ID0gWworICAgICAgICAgICAgICAgICduYW1lJworICAgICAgICAgICAgXQorCisgICAgICAgICAg ICBmb3IgYXJnIGluIHJlcXVpcmVkX2FyZ3M6CisgICAgICAgICAgICAgICAgaWYgYXJnIG5vdCBp biBkYXRhOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0dGV4dCgnLS0gZGVmaW5pdGlv biBpbmNvbXBsZXRlJykKKworICAgICAgICAgICAgIyB2YWxpZGF0ZSBjb25zdHJhaW50IGRhdGEu CisgICAgICAgICAgICBmb3Iga2V5IGluIFsncHJpbWFyeV9rZXknLCAndW5pcXVlX2NvbnN0cmFp bnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvcmVpZ25fa2V5JywgJ2NoZWNrX2NvbnN0 cmFpbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2x1ZGVfY29uc3RyYWludCddOgor ICAgICAgICAgICAgICAgIGlmIGtleSBpbiBkYXRhIGFuZCBsZW4oZGF0YVtrZXldKSA+IDA6Cisg ICAgICAgICAgICAgICAgICAgIGZvciBjb25zdHJhaW50IGluIGRhdGFba2V5XToKKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnZhbGlkYXRlX2NvbnN0cmFpbnMoa2V5LCBjb25z dHJhaW50KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0dGV4dCgKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tIGRlZmluaXRpb24gaW5jb21wbGV0ZSBm b3IgezB9Jy5mb3JtYXQoa2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAg ICAgICAgICAgIyBXZSB3aWxsIGNvbnZlcnQgcHJpdmlsZWdlcyBjb21pbmcgZnJvbSBjbGllbnQg cmVxdWlyZWQKKyAgICAgICAgICAgICMgaW4gc2VydmVyIHNpZGUgZm9ybWF0CisgICAgICAgICAg ICBpZiAncmVsYWNsJyBpbiBkYXRhOgorICAgICAgICAgICAgICAgIGRhdGFbJ3JlbGFjbCddID0g cGFyc2VfcHJpdl90b19kYihkYXRhWydyZWxhY2wnXSwgc2VsZi5hY2wpCisKKyAgICAgICAgICAg ICMgUGFyc2UgJiBmb3JtYXQgY29sdW1ucworICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3BhcnNl X2Zvcm1hdF9jb2x1bW5zKGRhdGEpCisgICAgICAgICAgICBkYXRhID0gQmFzZVRhYmxlVmlldy5j aGVja19hbmRfY29udmVydF9uYW1lX3RvX3N0cmluZyhkYXRhKQorCisgICAgICAgICAgICBpZiAn Zm9yZWlnbl9rZXknIGluIGRhdGE6CisgICAgICAgICAgICAgICAgZm9yIGMgaW4gZGF0YVsnZm9y ZWlnbl9rZXknXToKKyAgICAgICAgICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKAorICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYuZm9yZWlnbl9rZXlfdGVtcGxh dGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X3BhcmVudC5zcWwnXSksCisg ICAgICAgICAgICAgICAgICAgICAgICB0aWQ9Y1snY29sdW1ucyddWzBdWydyZWZlcmVuY2VzJ10p CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJk YXJyYXkoU1FMKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0 KQorCisgICAgICAgICAgICAgICAgICAgIGNbJ3JlbW90ZV9zY2hlbWEnXSA9IHJzZXRbJ3Jvd3Mn XVswXVsnc2NoZW1hJ10KKyAgICAgICAgICAgICAgICAgICAgY1sncmVtb3RlX3RhYmxlJ10gPSBy c2V0Wydyb3dzJ11bMF1bJ3RhYmxlJ10KKworICAgICAgICAgICAgcGFydGl0aW9uc19zcWwgPSAn JworICAgICAgICAgICAgaWYgJ2lzX3BhcnRpdGlvbmVkJyBpbiBkYXRhIGFuZCBkYXRhWydpc19w YXJ0aXRpb25lZCddOgorICAgICAgICAgICAgICAgIGRhdGFbJ3JlbGtpbmQnXSA9ICdwJworICAg ICAgICAgICAgICAgICMgY3JlYXRlIHBhcnRpdGlvbiBzY2hlbWUKKyAgICAgICAgICAgICAgICBk YXRhWydwYXJ0aXRpb25fc2NoZW1lJ10gPSBzZWxmLmdldF9wYXJ0aXRpb25fc2NoZW1lKGRhdGEp CisgICAgICAgICAgICAgICAgcGFydGl0aW9uc19zcWwgPSBzZWxmLmdldF9wYXJ0aXRpb25zX3Nx bChkYXRhKQorCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3Nl bGYudGFibGVfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ2NyZWF0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGF0YT1kYXRhLCBjb25uPXNlbGYuY29ubikKKworICAgICAgICAgICAgIyBBcHBlbmQg U1FMIGZvciBwYXJ0aXRpb25zCisgICAgICAgICAgICBTUUwgKz0gJ1xuJyArIHBhcnRpdGlvbnNf c3FsCisKKyAgICAgICAgU1FMID0gcmUuc3ViKCdcbnsyLH0nLCAnXG5cbicsIFNRTCkKKyAgICAg ICAgU1FMID0gU1FMLnN0cmlwKCdcbicpCisKKyAgICAgICAgcmV0dXJuIFNRTCwgZGF0YVsnbmFt ZSddIGlmICduYW1lJyBpbiBkYXRhIGVsc2Ugb2xkX2RhdGFbJ25hbWUnXQorCisgICAgZGVmIHVw ZGF0ZShzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQsIGRhdGEsIHJlcywgcGFyZW50X2lk PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHVwZGF0ZSBh biBleGlzdGluZyB0YWJsZSBvYmplY3QKKworICAgICAgICAgQXJnczoKKyAgICAgICAgICAgZ2lk OiBTZXJ2ZXIgR3JvdXAgSUQKKyAgICAgICAgICAgc2lkOiBTZXJ2ZXIgSUQKKyAgICAgICAgICAg ZGlkOiBEYXRhYmFzZSBJRAorICAgICAgICAgICBzY2lkOiBTY2hlbWEgSUQKKyAgICAgICAgICAg dGlkOiBUYWJsZSBJRAorICAgICAgICAgICBkYXRhOiBEYXRhIHRvIHVwZGF0ZQorICAgICAgICAg ICByZXM6IFRhYmxlIHByb3BlcnRpZXMKKyAgICAgICAgICAgcGFyZW50X2lkOiBwYXJlbnQgdGFi bGUgaWQgaWYgY3VycmVudCB0YWJsZSBpcyBwYXJ0aXRpb24gb2YgcGFyZW50CisgICAgICAgICAg ICAgICAgICAgIHRhYmxlIGVsc2Ugbm9uZQorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAg ICAgICAgICAgU1FMLCBuYW1lID0gc2VsZi5nZXRfc3FsKGRpZCwgc2NpZCwgdGlkLCBkYXRhLCBy ZXMpCisKKyAgICAgICAgICAgIFNRTCA9IFNRTC5zdHJpcCgnXG4nKS5zdHJpcCgnICcpCisgICAg ICAgICAgICBzdGF0dXMsIHJlc3QgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoU1FMKQorICAg ICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxf c2VydmVyX2Vycm9yKGVycm9ybXNnPXJlc3QpCisKKyAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90 ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdnZXRfc2NoZW1hX29pZC5zcWwnXSksIHRpZD10aWQpCisg ICAgICAgICAgICBzdGF0dXMsIHJlc3QgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkK KyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVy bmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXN0KQorCisgICAgICAgICAgICBpZiBub3QgcGFy ZW50X2lkOgorICAgICAgICAgICAgICAgIHBhcmVudF9pZCA9IHNjaWQKKworICAgICAgICAgICAg IyBDaGVjayBmb3IgcGFydGl0aW9ucworICAgICAgICAgICAgcGFydGl0aW9uc19vaWQgPSBkaWN0 KCkKKyAgICAgICAgICAgIGlmICdwYXJ0aXRpb25zJyBpbiBkYXRhOgorICAgICAgICAgICAgICAg ICMgRmV0Y2ggb2lkIG9mIHNjaGVtYSBmb3IgYWxsIGRldGFjaGVkIHBhcnRpdGlvbnMKKyAgICAg ICAgICAgICAgICBpZiAnZGVsZXRlZCcgaW4gZGF0YVsncGFydGl0aW9ucyddOgorICAgICAgICAg ICAgICAgICAgICBkZXRhY2hlZCA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciByb3cgaW4g ZGF0YVsncGFydGl0aW9ucyddWydkZWxldGVkJ106CisgICAgICAgICAgICAgICAgICAgICAgICBz dGF0dXMsIHBzY2lkID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIi8iLmpvaW4oWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs Zi50YWJsZV90ZW1wbGF0ZV9wYXRoLCAnZ2V0X3NjaGVtYV9vaWQuc3FsJworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGlkPXJvd1snb2lkJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAg ICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3Io ZXJyb3Jtc2c9cHNjaWQpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldGFjaGVkLmFwcGVu ZCh7J29pZCc6IHJvd1snb2lkJ10sICdzY2hlbWFfaWQnOiBwc2NpZH0pCisgICAgICAgICAgICAg ICAgICAgIHBhcnRpdGlvbnNfb2lkWydkZXRhY2hlZCddID0gZGV0YWNoZWQKKworICAgICAgICAg ICAgICAgICMgRmV0Y2ggb2lkIGFuZCBzY2hlbWEgb2lkIGZvciBhbGwgY3JlYXRlZC9hdHRhY2hl ZCBwYXJ0aXRpb25zCisgICAgICAgICAgICAgICAgaWYgJ2FkZGVkJyBpbiBkYXRhWydwYXJ0aXRp b25zJ106CisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgPSBbXQorICAgICAgICAgICAgICAg ICAgICBhdHRhY2hlZCA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciByb3cgaW4gZGF0YVsn cGFydGl0aW9ucyddWydhZGRlZCddOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcm93Wydp c19hdHRhY2gnXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHBzY2lkID0g c2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi LyIuam9pbihbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50 YWJsZV90ZW1wbGF0ZV9wYXRoLCAnZ2V0X3NjaGVtYV9vaWQuc3FsJworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0aWQ9cm93WydwYXJ0aXRpb25fbmFtZSddCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1wc2NpZCkKKworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaGVkLmFwcGVuZCh7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdvaWQnOiByb3dbJ3BhcnRpdGlvbl9uYW1lJ10sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfaWQnOiBwc2NpZAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0pCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdG1wX2RhdGEgPSBkaWN0KCkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0bXBfZGF0YVsnbmFtZSddID0gcm93WydwYXJ0aXRpb25fbmFtZSddCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsICdnZXRfb2lkLnNxbCcKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNjaWQ9c2NpZCwgZGF0YT10bXBfZGF0YQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgcHRpZCA9IHNl bGYuY29ubi5leGVjdXRlX3NjYWxhcihTUUwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlu dGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1wdGlkKQorCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3JlYXRlZC5hcHBlbmQoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnb2lkJzogcHRpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFf aWQnOiBzY2lkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKKworICAgICAgICAgICAg ICAgICAgICBwYXJ0aXRpb25zX29pZFsnY3JlYXRlZCddID0gY3JlYXRlZAorICAgICAgICAgICAg ICAgICAgICBwYXJ0aXRpb25zX29pZFsnYXR0YWNoZWQnXSA9IGF0dGFjaGVkCisKKyAgICAgICAg ICAgIHJldHVybiBqc29uaWZ5KAorICAgICAgICAgICAgICAgIG5vZGU9c2VsZi5ibHVlcHJpbnQu Z2VuZXJhdGVfYnJvd3Nlcl9ub2RlKAorICAgICAgICAgICAgICAgICAgICB0aWQsCisgICAgICAg ICAgICAgICAgICAgIHBhcmVudF9pZCwKKyAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAg ICAgICAgICAgICAgICAgaWNvbj0iaWNvbi1wYXJ0aXRpb24iIGlmICgKKyAgICAgICAgICAgICAg ICAgICAgICAgICdpc19wYXJ0aXRpb25lZCcgaW4gcmVzWydyb3dzJ11bMF0gYW5kIHJlc1sncm93 cyddWzBdWydpc19wYXJ0aXRpb25lZCddCisgICAgICAgICAgICAgICAgICAgICAgICApIG9yIHNl bGYubm9kZV90eXBlID09ICdwYXJ0aXRpb24nIGVsc2UgImljb24tdGFibGUiLAorICAgICAgICAg ICAgICAgICAgICBpc19wYXJ0aXRpb25lZD1UcnVlIGlmIHJlc1sncm93cyddWzBdWydyZWxraW5k J10gPT0gJ3AnIGVsc2UgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgIHBhcmVudF9zY2hlbWFf aWQ9c2NpZCwKKyAgICAgICAgICAgICAgICAgICAgc2NoZW1hX2lkPXJlc3RbJ3Jvd3MnXVswXVsn c2NpZCddLAorICAgICAgICAgICAgICAgICAgICBzY2hlbWFfbmFtZT1yZXN0Wydyb3dzJ11bMF1b J25zcG5hbWUnXSwKKyAgICAgICAgICAgICAgICAgICAgYWZmZWN0ZWRfcGFydGl0aW9ucz1wYXJ0 aXRpb25zX29pZAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICkKKyAgICAgICAgZXhj ZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9l cnJvcihlcnJvcm1zZz1zdHIoZSkpCisKKyAgICBkZWYgcHJvcGVydGllcyhzZWxmLCBnaWQsIHNp ZCwgZGlkLCBzY2lkLCB0aWQsIHJlcyk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0 aW9uIHdpbGwgc2hvdyB0aGUgcHJvcGVydGllcyBvZiB0aGUgc2VsZWN0ZWQgdGFibGUgbm9kZS4K KworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZ2lkOiBTZXJ2ZXIgR3JvdXAgSUQKKyAgICAg ICAgICAgIHNpZDogU2VydmVyIElECisgICAgICAgICAgICBkaWQ6ICBEYXRhYmFzZSBJRAorICAg ICAgICAgICAgc2NpZDogU2NoZW1hIElECisgICAgICAgICAgICBzY2lkOiBTY2hlbWEgSUQKKyAg ICAgICAgICAgIHRpZDogVGFibGUgSUQKKyAgICAgICAgICAgIHJlczogVGFibGUvUGFydGl0aW9u IHRhYmxlIHByb3BlcnRpZXMKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgSlNPTiBv ZiBzZWxlY3RlZCB0YWJsZSBub2RlCisgICAgICAgICIiIgorICAgICAgICBkYXRhID0gcmVzWydy b3dzJ11bMF0KKworICAgICAgICBkYXRhWyd2YWN1dW1fc2V0dGluZ3Nfc3RyJ10gPSAiIgorCisg ICAgICAgIGlmIGRhdGFbJ3RhYmxlX3ZhY3V1bV9zZXR0aW5nc19zdHInXSBpcyBub3QgTm9uZToK KyAgICAgICAgICAgIGRhdGFbJ3ZhY3V1bV9zZXR0aW5nc19zdHInXSArPSBkYXRhWworICAgICAg ICAgICAgICAgICd0YWJsZV92YWN1dW1fc2V0dGluZ3Nfc3RyJ10ucmVwbGFjZSgnLCcsICdcbicp CisKKyAgICAgICAgaWYgZGF0YVsndG9hc3RfdGFibGVfdmFjdXVtX3NldHRpbmdzX3N0ciddIGlz IG5vdCBOb25lOgorICAgICAgICAgICAgZGF0YVsndmFjdXVtX3NldHRpbmdzX3N0ciddICs9ICdc bicgKyAnXG4nLmpvaW4oCisgICAgICAgICAgICAgICAgWyd0b2FzdF8nICsgc2V0dGluZyBmb3Ig c2V0dGluZyBpbiBkYXRhWworICAgICAgICAgICAgICAgICAgICAndG9hc3RfdGFibGVfdmFjdXVt X3NldHRpbmdzX3N0cicKKyAgICAgICAgICAgICAgICBdLnNwbGl0KCcsJyldCisgICAgICAgICAg ICApCisgICAgICAgIGRhdGFbJ3ZhY3V1bV9zZXR0aW5nc19zdHInXSA9IGRhdGFbCisgICAgICAg ICAgICAndmFjdXVtX3NldHRpbmdzX3N0cicKKyAgICAgICAgXS5yZXBsYWNlKCI9IiwgIiA9ICIp CisKKyAgICAgICAgZGF0YSA9IHNlbGYuX2Zvcm1hdHRlcihkaWQsIHNjaWQsIHRpZCwgZGF0YSkK KworICAgICAgICAjIEZldGNoIHBhcnRpdGlvbiBvZiB0aGlzIHRhYmxlIGlmIGl0IGlzIHBhcnRp dGlvbmVkIHRhYmxlLgorICAgICAgICBpZiAnaXNfcGFydGl0aW9uZWQnIGluIGRhdGEgYW5kIGRh dGFbJ2lzX3BhcnRpdGlvbmVkJ106CisgICAgICAgICAgICAjIGdldCB0aGUgcGFydGl0aW9uIHR5 cGUKKyAgICAgICAgICAgIGRhdGFbJ3BhcnRpdGlvbl90eXBlJ10gPSBkYXRhWydwYXJ0aXRpb25f c2NoZW1lJ10uc3BsaXQoKVswXS5sb3dlcigpCisKKyAgICAgICAgICAgIHBhcnRpdGlvbnMgPSBb XQorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnBhcnRp dGlvbl90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnbm9kZXMuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNjaWQ9c2NpZCwgdGlkPXRpZCkKKyAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29u bi5leGVjdXRlXzJkYXJyYXkoU1FMKQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAg ICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJzZXQpCisK KyAgICAgICAgICAgIGZvciByb3cgaW4gcnNldFsncm93cyddOgorICAgICAgICAgICAgICAgIHBh cnRpdGlvbl9uYW1lID0gcm93WyduYW1lJ10KKyAgICAgICAgICAgICAgICAjIGlmIHNjaGVtYSBu YW1lIGlzIGRpZmZlcmVudCB0aGVuIGRpc3BsYXkgc2NoZW1hCisgICAgICAgICAgICAgICAgIyBx dWFsaWZpZWQgbmFtZSBvbiBVSS4KKyAgICAgICAgICAgICAgICBpZiBkYXRhWydzY2hlbWEnXSAh PSByb3dbJ3NjaGVtYV9uYW1lJ106CisgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbl9uYW1l ID0gcm93WydzY2hlbWFfbmFtZSddICsgJy4nICsgcm93WyduYW1lJ10KKworICAgICAgICAgICAg ICAgIGlmIGRhdGFbJ3BhcnRpdGlvbl90eXBlJ10gPT0gJ3JhbmdlJzoKKyAgICAgICAgICAgICAg ICAgICAgcmFuZ2VfcGFydCA9IHJvd1sncGFydGl0aW9uX3ZhbHVlJ10uc3BsaXQoCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ0ZPUiBWQUxVRVMgRlJPTSAoJylbMV0uc3BsaXQoJykgVE8n KQorICAgICAgICAgICAgICAgICAgICByYW5nZV9mcm9tID0gcmFuZ2VfcGFydFswXQorICAgICAg ICAgICAgICAgICAgICByYW5nZV90byA9IHJhbmdlX3BhcnRbMV1bMjotMV0KKworICAgICAgICAg ICAgICAgICAgICBwYXJ0aXRpb25zLmFwcGVuZCh7CisgICAgICAgICAgICAgICAgICAgICAgICAn b2lkJzogcm93WydvaWQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdwYXJ0aXRpb25fbmFt ZSc6IHBhcnRpdGlvbl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlc19mcm9t JzogcmFuZ2VfZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZXNfdG8nOiByYW5n ZV90bworICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAg ICAgICAgICAgICAgICAgIHJhbmdlX3BhcnQgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICBy b3dbJ3BhcnRpdGlvbl92YWx1ZSddLnNwbGl0KCdGT1IgVkFMVUVTIElOICgnKVsxXQorCisgICAg ICAgICAgICAgICAgICAgIHJhbmdlX2luID0gcmFuZ2VfcGFydFs6LTFdCisgICAgICAgICAgICAg ICAgICAgIHBhcnRpdGlvbnMuYXBwZW5kKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICdvaWQn OiByb3dbJ29pZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnRpdGlvbl9uYW1lJzog cGFydGl0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWVzX2luJzogcmFu Z2VfaW4KKyAgICAgICAgICAgICAgICAgICAgfSkKKworICAgICAgICAgICAgZGF0YVsncGFydGl0 aW9ucyddID0gcGFydGl0aW9ucworCisgICAgICAgIHJldHVybiBhamF4X3Jlc3BvbnNlKAorICAg ICAgICAgICAgcmVzcG9uc2U9ZGF0YSwKKyAgICAgICAgICAgIHN0YXR1cz0yMDAKKyAgICAgICAg KQorCisgICAgZGVmIGdldF9wYXJ0aXRpb25zX3NxbChzZWxmLCBwYXJ0aXRpb25zKToKKyAgICAg ICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBpdGVyYXRlIGFsbCB0aGUgcGFydGl0 aW9ucyBhbmQgY3JlYXRlIFNRTC4KKworICAgICAgICA6cGFyYW0gcGFydGl0aW9uczogTGlzdCBv ZiBwYXJ0aXRpb25zCisgICAgICAgICIiIgorICAgICAgICBzcWwgPSAnJworCisgICAgICAgIGZv ciByb3cgaW4gcGFydGl0aW9uc1sncGFydGl0aW9ucyddOgorICAgICAgICAgICAgcGFydF9kYXRh ID0gZGljdCgpCisgICAgICAgICAgICBwYXJ0X2RhdGFbJ3BhcnRpdGlvbmVkX3RhYmxlX25hbWUn XSA9IHBhcnRpdGlvbnNbJ25hbWUnXQorICAgICAgICAgICAgcGFydF9kYXRhWydwYXJlbnRfc2No ZW1hJ10gPSBwYXJ0aXRpb25zWydzY2hlbWEnXQorCisgICAgICAgICAgICBpZiAnaXNfYXR0YWNo JyBpbiByb3cgYW5kIHJvd1snaXNfYXR0YWNoJ106CisgICAgICAgICAgICAgICAgc2NoZW1hX25h bWUsIHRhYmxlX25hbWUgPSBcCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0X3NjaGVtYV9h bmRfdGFibGVfbmFtZShyb3dbJ3BhcnRpdGlvbl9uYW1lJ10pCisKKyAgICAgICAgICAgICAgICBw YXJ0X2RhdGFbJ3NjaGVtYSddID0gc2NoZW1hX25hbWUKKyAgICAgICAgICAgICAgICBwYXJ0X2Rh dGFbJ25hbWUnXSA9IHRhYmxlX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg ICAgcGFydF9kYXRhWydzY2hlbWEnXSA9IHBhcnRpdGlvbnNbJ3NjaGVtYSddCisgICAgICAgICAg ICAgICAgcGFydF9kYXRhWydyZWxpc3BhcnRpdGlvbiddID0gVHJ1ZQorICAgICAgICAgICAgICAg IHBhcnRfZGF0YVsnbmFtZSddID0gcm93WydwYXJ0aXRpb25fbmFtZSddCisKKyAgICAgICAgICAg IGlmIHBhcnRpdGlvbnNbJ3BhcnRpdGlvbl90eXBlJ10gPT0gJ3JhbmdlJzoKKyAgICAgICAgICAg ICAgICByYW5nZV9mcm9tID0gcm93Wyd2YWx1ZXNfZnJvbSddLnNwbGl0KCcsJykKKyAgICAgICAg ICAgICAgICByYW5nZV90byA9IHJvd1sndmFsdWVzX3RvJ10uc3BsaXQoJywnKQorCisgICAgICAg ICAgICAgICAgZnJvbV9zdHIgPSAnLCAnLmpvaW4oInswfSIuZm9ybWF0KGl0ZW0pIGZvciBpdGVt IGluIHJhbmdlX2Zyb20pCisgICAgICAgICAgICAgICAgdG9fc3RyID0gJywgJy5qb2luKCJ7MH0i LmZvcm1hdChpdGVtKSBmb3IgaXRlbSBpbiByYW5nZV90bykKKworICAgICAgICAgICAgICAgIHBh cnRfZGF0YVsncGFydGl0aW9uX3ZhbHVlJ10gPSAnRk9SIFZBTFVFUyBGUk9NICgnICsgZnJvbV9z dHIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICcp IFRPICgnICsgdG9fc3RyICsgJyknCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg IHJhbmdlX2luID0gcm93Wyd2YWx1ZXNfaW4nXS5zcGxpdCgnLCcpCisgICAgICAgICAgICAgICAg aW5fc3RyID0gJywgJy5qb2luKCJ7MH0iLmZvcm1hdChpdGVtKSBmb3IgaXRlbSBpbiByYW5nZV9p bikKKyAgICAgICAgICAgICAgICBwYXJ0X2RhdGFbJ3BhcnRpdGlvbl92YWx1ZSddID0gJ0ZPUiBW QUxVRVMgSU4gKCcgKyBpbl9zdHIgKyAnKScKKworICAgICAgICAgICAgaWYgJ2lzX2F0dGFjaCcg aW4gcm93IGFuZCByb3dbJ2lzX2F0dGFjaCddOgorICAgICAgICAgICAgICAgIHBhcnRpdGlvbl9z cWwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxm LnBhcnRpdGlvbl90ZW1wbGF0ZV9wYXRoLCAnYXR0YWNoLnNxbCddKSwKKyAgICAgICAgICAgICAg ICAgICAgZGF0YT1wYXJ0X2RhdGEsIGNvbm49c2VsZi5jb25uCisgICAgICAgICAgICAgICAgKQor ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJ0aXRpb25fc3FsID0gcmVuZGVy X3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5wYXJ0aXRpb25f dGVtcGxhdGVfcGF0aCwgJ2NyZWF0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgIGRhdGE9 cGFydF9kYXRhLCBjb25uPXNlbGYuY29ubgorICAgICAgICAgICAgICAgICkKKworICAgICAgICAg ICAgc3FsICs9IHBhcnRpdGlvbl9zcWwgKyAnXG4nCisKKyAgICAgICAgcmV0dXJuIHNxbAorCisg ICAgZGVmIHRydW5jYXRlKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCwgcmVzKToKKyAg ICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCB0cnVuY2F0ZSB0aGUgdGFibGUg b2JqZWN0CisKKyAgICAgICAgIEFyZ3M6CisgICAgICAgICAgIGdpZDogU2VydmVyIEdyb3VwIElE CisgICAgICAgICAgIHNpZDogU2VydmVyIElECisgICAgICAgICAgIGRpZDogRGF0YWJhc2UgSUQK KyAgICAgICAgICAgc2NpZDogU2NoZW1hIElECisgICAgICAgICAgIHRpZDogVGFibGUgSUQKKyAg ICAgICAgIiIiCisgICAgICAgICMgQmVsb3cgd2lsbCBkZWNpZGUgaWYgaXQncyBzaW1wbGUgZHJv cCBvciBkcm9wIHdpdGggY2FzY2FkZSBjYWxsCisgICAgICAgIGRhdGEgPSByZXF1ZXN0LmZvcm0g aWYgcmVxdWVzdC5mb3JtIGVsc2UganNvbi5sb2FkcygKKyAgICAgICAgICAgIHJlcXVlc3QuZGF0 YSwgZW5jb2Rpbmc9J3V0Zi04JworICAgICAgICApCisgICAgICAgICMgQ29udmVydCBzdHIgJ3Ry dWUnIHRvIGJvb2xlYW4gdHlwZQorICAgICAgICBpc19jYXNjYWRlID0ganNvbi5sb2FkcyhkYXRh WydjYXNjYWRlJ10pCisKKyAgICAgICAgZGF0YSA9IHJlc1sncm93cyddWzBdCisKKyAgICAgICAg U1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RydW5jYXRlLnNxbCdd KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY2FzY2FkZT1pc19j YXNjYWRlKQorICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX3NjYWxhcihT UUwpCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxf c2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKworICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jl c3BvbnNlKAorICAgICAgICAgICAgc3VjY2Vzcz0xLAorICAgICAgICAgICAgaW5mbz1nZXR0ZXh0 KCJUYWJsZSB0cnVuY2F0ZWQiKSwKKyAgICAgICAgICAgIGRhdGE9eworICAgICAgICAgICAgICAg ICdpZCc6IHRpZCwKKyAgICAgICAgICAgICAgICAnc2NpZCc6IHNjaWQKKyAgICAgICAgICAgIH0K KyAgICAgICAgKQorCisgICAgZGVmIGdldF9zY2hlbWFfYW5kX3RhYmxlX25hbWUoc2VsZiwgdGlk KToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBmZXRjaCB0aGUgc2No ZW1hIHF1YWxpZmllZCBuYW1lIG9mIHRoZQorICAgICAgICBnaXZlbiB0YWJsZSBpZC4KKworICAg ICAgICA6cGFyYW0gdGlkOiBUYWJsZSBJZC4KKyAgICAgICAgIiIiCisgICAgICAgICMgR2V0IHNj aGVtYSBvaWQKKyAgICAgICAgc3RhdHVzLCBzY2lkID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFy KAorICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBs YXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfc2No ZW1hX29pZC5zcWwnXSksIHRpZD10aWQpKQorICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAg ICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1zY2lkKQorCisgICAg ICAgICMgRmV0Y2ggc2NoZW1hIG5hbWUKKyAgICAgICAgc3RhdHVzLCBzY2hlbWFfbmFtZSA9IHNl bGYuY29ubi5leGVjdXRlX3NjYWxhcigKKyAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgiLyIu am9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnZ2V0X3NjaGVtYS5zcWwnXSksIGNvbm49c2VsZi5jb25uLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNjaWQ9c2NpZCkKKyAgICAgICAgKQorICAgICAgICBpZiBu b3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJv cm1zZz1zY2hlbWFfbmFtZSkKKworICAgICAgICAjIEZldGNoIFRhYmxlIG5hbWUKKyAgICAgICAg c3RhdHVzLCB0YWJsZV9uYW1lID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKAorICAgICAgICAg ICAgcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxl X3RlbXBsYXRlX3BhdGgsICdnZXRfdGFibGUuc3FsJ10pLAorICAgICAgICAgICAgICAgIGNvbm49 c2VsZi5jb25uLCBzY2lkPXNjaWQsIHRpZD10aWQKKyAgICAgICAgICAgICkKKyAgICAgICAgKQor ICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz10YWJsZV9uYW1lKQorCisgICAgICAgIHJldHVybiBzY2hlbWFfbmFt ZSwgdGFibGVfbmFtZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjb252ZXJ0X2xlbmd0 aF9wcmVjaXNpb25fdG9fc3RyaW5nKGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBm dW5jdGlvbiBpcyB1c2VkIHRvIGNvbnZlcnQgbGVuZ3RoICYgcHJlY2lzaW9uIHRvIHN0cmluZwor ICAgICAgICB0byBoYW5kbGUgY2FzZSBsaWtlIHdoZW4gdXNlciBnaXZlcyAwIGFzIGxlbmd0aAor CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBkYXRhOiBEYXRhIGZyb20gY2xpZW50CisKKyAg ICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIENvbnZlcnRlZCBkYXRhCisgICAgICAgICIiIgor ICAgICAgICBpZiAnYXR0bGVuJyBpbiBkYXRhIGFuZCBkYXRhWydhdHRsZW4nXSBpcyBub3QgTm9u ZToKKyAgICAgICAgICAgIGRhdGFbJ2F0dGxlbiddID0gc3RyKGRhdGFbJ2F0dGxlbiddKQorICAg ICAgICBpZiAnYXR0cHJlY2lzaW9uJyBpbiBkYXRhIGFuZCBkYXRhWydhdHRwcmVjaXNpb24nXSBp cyBub3QgTm9uZToKKyAgICAgICAgICAgIGRhdGFbJ2F0dHByZWNpc2lvbiddID0gc3RyKGRhdGFb J2F0dHByZWNpc2lvbiddKQorICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIHNlYXJjaF9j b3ZlcmluZ2luZGV4KHNlbGYsIHRpZCwgY29scyk6CisgICAgICAgICIiIgorCisgICAgICAgIEFy Z3M6CisgICAgICAgICAgdGlkOiBUYWJsZSBpZAorICAgICAgICAgIGNvbHM6IGNvbHVtbiBsaXN0 CisKKyAgICAgICAgUmV0dXJuczoKKworICAgICAgICAiIiIKKworICAgICAgICBjb2xzID0gc2V0 KGNvbHMpCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5mb3Jl aWduX2tleV90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdnZXRfY29uc3RyYWludHMuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGlkPXRpZCkKKyAgICAgICAgc3RhdHVzLCBjb25zdHJhaW50cyA9IHNlbGYuY29ubi5l eGVjdXRlX2RpY3QoU1FMKQorCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICBy YWlzZSBFeGNlcHRpb24oY29uc3RyYWludHMpCisKKyAgICAgICAgZm9yIGNvc3RybnQgaW4gY29u c3RyYWludHNbJ3Jvd3MnXToKKworICAgICAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKAor ICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLmZvcmVpZ25fa2V5X3RlbXBsYXRlX3BhdGgs ICdnZXRfY29scy5zcWwnXSksCisgICAgICAgICAgICAgICAgY2lkPWNvc3RybnRbJ29pZCddLAor ICAgICAgICAgICAgICAgIGNvbGNudD1jb3N0cm50WydpbmRuYXR0cyddKQorICAgICAgICAgICAg c3RhdHVzLCByZXN0ID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCisKKyAgICAgICAgICAg IGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9l cnJvcihlcnJvcm1zZz1yZXN0KQorCisgICAgICAgICAgICBpbmRleGNvbHMgPSBzZXQoKQorICAg ICAgICAgICAgZm9yIHIgaW4gcmVzdFsncm93cyddOgorICAgICAgICAgICAgICAgIGluZGV4Y29s cy5hZGQoclsnY29sdW1uJ10uc3RyaXAoJyInKSkKKworICAgICAgICAgICAgaWYgbGVuKGNvbHMg LSBpbmRleGNvbHMpID09IGxlbihpbmRleGNvbHMgLSBjb2xzKSA9PSAwOgorICAgICAgICAgICAg ICAgIHJldHVybiBjb3N0cm50WyJpZHhuYW1lIl0KKworICAgICAgICByZXR1cm4gTm9uZQpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZW1wbGF0ZXMvYnJvd3Nlci9qcy9icm93c2Vy LmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZW1wbGF0ZXMvYnJvd3Nlci9qcy9icm93c2VyLmpz CmluZGV4IDljYTNhMTYuLjBjY2NmOWMgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIv dGVtcGxhdGVzL2Jyb3dzZXIvanMvYnJvd3Nlci5qcworKysgYi93ZWIvcGdhZG1pbi9icm93c2Vy L3RlbXBsYXRlcy9icm93c2VyL2pzL2Jyb3dzZXIuanMKQEAgLTIwLDcgKzIwLDcgQEAgZGVmaW5l KAogICAkID0gJCB8fCB3aW5kb3cualF1ZXJ5IHx8IHdpbmRvdy4kOwogICBCb290c3RyYXAgPSBC b290c3RyYXAgfHwgd2luZG93LkJvb3RzdHJhcDsKIAotICBwZ0FkbWluLkJyb3dzZXIgPSBwZ0Fk bWluLkJyb3dzZXIgfHwge307CisgIHZhciBwZ0Jyb3dzZXIgPSBwZ0FkbWluLkJyb3dzZXIgPSBw Z0FkbWluLkJyb3dzZXIgfHwge307CiAKICAgdmFyIHBhbmVsRXZlbnRzID0ge307CiAgIHBhbmVs RXZlbnRzW3djRG9ja2VyLkVWRU5ULlZJU0lCSUxJVFlfQ0hBTkdFRF0gPSBmdW5jdGlvbigpIHsK QEAgLTE3NTYsNiArMTc1NiwyMDEgQEAgZGVmaW5lKAogICAgICAgfQogICAgIH0sCiAKKyAgICBy ZW1vdmVDaGlsZFRyZWVOb2Rlc0J5SWQ6IGZ1bmN0aW9uKF9wYXJlbnROb2RlLCBfY29sbFR5cGUs IF9jaGlsZElkcykgeworICAgICAgdmFyIHRyZWUgPSBwZ0Jyb3dzZXIudHJlZTsKKyAgICAgIGlm KF9wYXJlbnROb2RlICYmIF9jb2xsVHlwZSkgeworICAgICAgICB2YXIgY2hpbGRyZW4gPSB0cmVl LmNoaWxkcmVuKF9wYXJlbnROb2RlKSwKKyAgICAgICAgICAgIGlkeCA9IDAsIHNpemUgPSBjaGls ZHJlbi5sZW5ndGgsCisgICAgICAgICAgICBjaGlsZE5vZGUsIGNoaWxkTm9kZURhdGE7CisKKyAg ICAgICAgX3BhcmVudE5vZGUgPSBudWxsOworCisgICAgICAgIGZvciAoOyBpZHggPCBzaXplOyBp ZHgrKykgeworICAgICAgICAgIGNoaWxkTm9kZSA9IGNoaWxkcmVuLmVxKGlkeCk7CisgICAgICAg ICAgY2hpbGROb2RlRGF0YSA9IHRyZWUuaXRlbURhdGEoY2hpbGROb2RlKTsKKworICAgICAgICAg IGlmIChjaGlsZE5vZGVEYXRhLl90eXBlID09IF9jb2xsVHlwZSkgeworICAgICAgICAgICAgX3Bh cmVudE5vZGUgPSBjaGlsZE5vZGU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKF9wYXJlbnROb2RlKSB7CisgICAgICAgIHZh ciBjaGlsZHJlbiA9IHRyZWUuY2hpbGRyZW4oX3BhcmVudE5vZGUpLAorICAgICAgICAgICAgaWR4 ID0gMCwgc2l6ZSA9IGNoaWxkcmVuLmxlbmd0aCwKKyAgICAgICAgICAgIGNoaWxkTm9kZSwgY2hp bGROb2RlRGF0YSwKKyAgICAgICAgICAgIHByZXZDaGlsZE5vZGU7CisKKyAgICAgICAgZm9yICg7 IGlkeCA8IHNpemU7IGlkeCsrKSB7CisgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGRyZW4uZXEo aWR4KTsKKyAgICAgICAgICBjaGlsZE5vZGVEYXRhID0gdHJlZS5pdGVtRGF0YShjaGlsZE5vZGUp OworCisgICAgICAgICAgaWYgKF9jaGlsZElkcy5pbmRleE9mKGNoaWxkTm9kZURhdGEuX2lkKSAh PSAtMSkgeworICAgICAgICAgICAgcGdCcm93c2VyLnJlbW92ZVRyZWVOb2RlKGNoaWxkTm9kZSwg ZmFsc2UsIF9wYXJlbnROb2RlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0 dXJuIHRydWU7CisgICAgICB9CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwKKworICAgIHJl bW92ZVRyZWVOb2RlOiBmdW5jdGlvbihfbm9kZSwgX3NlbGVjdE5leHQsIF9wYXJlbnROb2RlKSB7 CisgICAgICB2YXIgdHJlZSA9IHBnQnJvd3Nlci50cmVlLAorICAgICAgICAgIG5vZGVUb1NlbGVj dCA9IG51bGw7CisKKyAgICAgIGlmICghX25vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor ICAgICAgaWYgKF9zZWxlY3ROZXh0KSB7CisgICAgICAgIG5vZGVUb1NlbGVjdCA9IHRyZWUubmV4 dChfbm9kZSk7CisgICAgICAgIGlmICghbm9kZVRvU2VsZWN0IHx8ICFub2RlVG9TZWxlY3QubGVu Z3RoKSB7CisgICAgICAgICAgbm9kZVRvU2VsZWN0ID0gdHJlZS5wcmV2KF9ub2RlKTsKKworICAg ICAgICAgIGlmICghbm9kZVRvU2VsZWN0IHx8ICFub2RlVG9TZWxlY3QubGVuZ3RoKSB7CisgICAg ICAgICAgICBpZiAoIV9wYXJlbnROb2RlKSB7CisgICAgICAgICAgICAgIG5vZGVUb1NlbGVjdCA9 IHRyZWUucGFyZW50KF9ub2RlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg IG5vZGVUb1NlbGVjdCA9IF9wYXJlbnROb2RlOworICAgICAgICAgICAgfQorICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICBpZiAobm9kZVRvU2VsZWN0KQorICAgICAgICAgIHRyZWUuc2Vs ZWN0KG5vZGVUb1NlbGVjdCk7CisgICAgICB9CisgICAgICB0cmVlLnJlbW92ZShfbm9kZSk7Cisg ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAorCisgICAgZmluZFNpYmxpbmdUcmVlTm9kZTogZnVu Y3Rpb24oX25vZGUsIF9pZCkgeworICAgICAgdmFyIHRyZWUgPSBwZ0Jyb3dzZXIudHJlZSwKKyAg ICAgICAgICBwYXJlbnROb2RlID0gdHJlZS5wYXJlbnQoX25vZGUpLAorICAgICAgICAgIHNpYmxp bmdzID0gdHJlZS5jaGlsZHJlbihwYXJlbnROb2RlKSwKKyAgICAgICAgICBpZHggPSAwLCBub2Rl RGF0YSwgbm9kZTsKKworICAgICAgZm9yKDsgaWR4IDwgc2libGluZ3MubGVuZ3RoOyBpZHgrKykg eworICAgICAgICBub2RlID0gc2libGluZ3MuZXEoaWR4KTsKKyAgICAgICAgbm9kZURhdGEgPSB0 cmVlLml0ZW1EYXRhKG5vZGUpOworCisgICAgICAgIGlmIChub2RlRGF0YSAmJiBub2RlRGF0YS5f aWQgPT0gX2lkKQorICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgfQorICAgICAgcmV0dXJu IG51bGw7CisgICAgfSwKKworICAgIGZpbmRQYXJlbnRUcmVlTm9kZUJ5VHlwZTogZnVuY3Rpb24o X25vZGUsIF9wYXJlbnRUeXBlKSB7CisgICAgICB2YXIgdHJlZSA9IHBnQnJvd3Nlci50cmVlLAor ICAgICAgICAgIG5vZGVEYXRhLAorICAgICAgICAgIG5vZGUgPSBfbm9kZTsKKworICAgICAgZG8g eworICAgICAgICBub2RlRGF0YSA9IHRyZWUuaXRlbURhdGEobm9kZSk7CisgICAgICAgIGlmIChu b2RlRGF0YSAmJiBub2RlRGF0YS5fdHlwZSA9PSBfcGFyZW50VHlwZSkKKyAgICAgICAgICByZXR1 cm4gbm9kZTsKKyAgICAgICAgbm9kZSA9IHRyZWUuaGFzUGFyZW50KG5vZGUpID8gdHJlZS5wYXJl bnQobm9kZSkgOiBudWxsOworICAgICAgfSB3aGlsZSAobm9kZSk7CisKKyAgICAgIHJldHVybiBu dWxsOworICAgIH0sCisKKyAgICBmaW5kQ2hpbGRDb2xsZWN0aW9uVHJlZU5vZGU6IGZ1bmN0aW9u KF9ub2RlLCBfY29sbFR5cGUpIHsKKyAgICAgIHZhciB0cmVlID0gcGdCcm93c2VyLnRyZWUsCisg ICAgICAgICAgbm9kZURhdGEsIGlkeCA9IDAsCisgICAgICAgICAgbm9kZSA9IF9ub2RlLAorICAg ICAgICAgIGNoaWxkcmVuID0gX25vZGUgJiYgdHJlZS5jaGlsZHJlbihfbm9kZSk7CisKKyAgICAg IGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIG51bGw7 CisKKyAgICAgIGZvcig7IGlkeCA8IGNoaWxkcmVuLmxlbmd0aDsgaWR4KyspIHsKKyAgICAgICAg bm9kZSA9IGNoaWxkcmVuLmVxKGlkeCk7CisgICAgICAgIG5vZGVEYXRhID0gdHJlZS5pdGVtRGF0 YShub2RlKTsKKworICAgICAgICBpZiAobm9kZURhdGEgJiYgbm9kZURhdGEuX3R5cGUgPT0gX2Nv bGxUeXBlKQorICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgfQorICAgICAgcmV0dXJuIG51 bGw7CisgICAgfSwKKworICAgIGFkZENoaWxkVHJlZU5vZGVzOiBmdW5jdGlvbihfdHJlZUhpZXJh cmNoeSwgX25vZGUsIF90eXBlLCBfYXJyYXlJZHMsIF9jYWxsYmFjaykgeworICAgICAgdmFyIG1v ZHVsZSA9IF90eXBlIGluIHBnQnJvd3Nlci5Ob2RlcyAmJiBwZ0Jyb3dzZXIuTm9kZXNbX3R5cGVd LAorICAgICAgICAgIGNoaWxkVHJlZUluZm8gPSBfYXJyYXlJZHMubGVuZ3RoICYmIF8uZXh0ZW5k KAorICAgICAgICAgICAge30sIF8ubWFwT2JqZWN0KAorICAgICAgICAgICAgICBfdHJlZUhpZXJh cmNoeSwgZnVuY3Rpb24oX3ZhbCwgX2tleSkgeworICAgICAgICAgICAgICAgIF92YWwucHJpb3Jp dHkgLT0gMTsgcmV0dXJuIF92YWw7CisgICAgICAgICAgICAgIH0pCisgICAgICAgICAgKSwKKyAg ICAgICAgICBhcnJheUNoaWxkTm9kZURhdGEgPSBbXSwKKyAgICAgICAgICBmZXRjaE5vZGVJbmZv ID0gZnVuY3Rpb24oX2NhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAoIV9hcnJheUlkcy5sZW5n dGgpIHsKKyAgICAgICAgICAgICAgaWYgKF9jYWxsYmFjaykgeworICAgICAgICAgICAgICAgIF9j YWxsYmFjaygpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGNoaWxkRHVtbXlJbmZvID0geworICAgICAgICAg ICAgICAgICAgJ19pZCc6IF9hcnJheUlkcy5wb3AoKSwgJ190eXBlJzogX3R5cGUsICdwcmlvcml0 eSc6IDAKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIGNoaWxkTm9kZVVybDsK KyAgICAgICAgICAgIGNoaWxkVHJlZUluZm9bX3R5cGVdID0gY2hpbGREdW1teUluZm87CisKKyAg ICAgICAgICAgIGNoaWxkTm9kZVVybCA9IG1vZHVsZS5nZW5lcmF0ZV91cmwoCisgICAgICAgICAg ICAgIG51bGwsICdub2RlcycsIGNoaWxkRHVtbXlJbmZvLCB0cnVlLCBjaGlsZFRyZWVJbmZvCisg ICAgICAgICAgICApOworICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygiRmV0Y2hpbmcgbm9kZSBp bmZvcm1hdGlvbiB1c2luZzogIiwgY2hpbGROb2RlVXJsKTsKKworICAgICAgICAgICAgJC5hamF4 KHsKKyAgICAgICAgICAgICAgdXJsOiBjaGlsZE5vZGVVcmwsCisgICAgICAgICAgICAgIGRhdGFU eXBlOiAianNvbiIsCisgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgeworICAg ICAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgYXJyYXlD aGlsZE5vZGVEYXRhLnB1c2gocmVzLmRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBmZXRjaE5vZGVJbmZvKF9jYWxsYmFjayk7CisgICAgICAgICAgICAgIH0sCisgICAg ICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIsIHN0YXR1cywgZXJyb3IpIHsKKyAgICAgICAg ICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgdmFyIGVyciA9ICQucGFyc2VKU09OKHho ci5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgICAgICAgaWYgKGVyci5zdWNjZXNzID09IDAp IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFsZXJ0aWZ5V3JhcHBlciA9IG5ldyBBbGVydGlm eVdyYXBwZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgYWxlcnRpZnlXcmFwcGVyLmVycm9yKGVy ci5lcnJvcm1zZyk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBjYXRj aCAoZSkge30KKyAgICAgICAgICAgICAgICBmZXRjaE5vZGVJbmZvKF9jYWxsYmFjayk7CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH07CisKKworICAgICAgaWYg KCFtb2R1bGUpIHsKKyAgICAgICAgY29uc29sZS53YXJuaW5nKAorICAgICAgICAgICJEZXZlbG9w ZXI6IENvdWxkbid0IGZpbmQgdGhlIG1vZHVsZSBmb3IgdGhlIGdpdmVuIGNoaWxkOiAiLAorICAg ICAgICAgIF8uY2xvbmUoYXJndW1lbnRzKQorICAgICAgICApOworICAgICAgICByZXR1cm47Cisg ICAgICB9CisKKyAgICAgIGlmIChwZ0Jyb3dzZXIudHJlZS53YXNMb2FkKF9ub2RlKSB8fCBwZ0Jy b3dzZXIudHJlZS5pc0xlYWYoX25vZGUpKSB7CisgICAgICAgIGZldGNoTm9kZUluZm8oZnVuY3Rp b24oKSB7CisgICAgICAgICAgY29uc29sZS5sb2coJ0FwcGVuZCB0aGlzIG5vZGVzOicsIGFycmF5 Q2hpbGROb2RlRGF0YSk7CisgICAgICAgICAgXy5lYWNoKGFycmF5Q2hpbGROb2RlRGF0YSwgZnVu Y3Rpb24oX25vZERhdGEpIHsKKyAgICAgICAgICAgIHBnQnJvd3Nlci5FdmVudHMudHJpZ2dlcigK KyAgICAgICAgICAgICAgJ3BnYWRtaW46YnJvd3Nlcjp0cmVlOmFkZCcsIF9ub2REYXRhLCBfdHJl ZUhpZXJhcmNoeQorICAgICAgICAgICAgKTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIGlm IChfY2FsbGJhY2spIHsKKyAgICAgICAgICAgIF9jYWxsYmFjaygpOworICAgICAgICAgIH0KKyAg ICAgICAgfSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoX2NhbGxiYWNrKSB7CisgICAg ICAgICAgX2NhbGxiYWNrKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorCiAgICAgX3Jl ZnJlc2hOb2RlOiBmdW5jdGlvbihfY3R4LCBfZCkgewogICAgICAgdmFyIHRyYXZlcnNlTm9kZXMg PSBmdW5jdGlvbihfZCkgewogICAgICAgICAgICAgdmFyIF9jdHggPSB0aGlzLCBpZHggPSAwLCBj dHgsIGQsCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3RlbXBsYXRlcy9icm93c2Vy L2pzL25vZGUuanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3RlbXBsYXRlcy9icm93c2VyL2pzL25v ZGUuanMKaW5kZXggMzI3M2IyYi4uZDdkMzIxZSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJv d3Nlci90ZW1wbGF0ZXMvYnJvd3Nlci9qcy9ub2RlLmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvdGVtcGxhdGVzL2Jyb3dzZXIvanMvbm9kZS5qcwpAQCAtNjUyLDE4ICs2NTIsNyBAQCBkZWZp bmUoWwogICAgICAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcyA9PSAwKSB7CiAgICAgICAgICAg ICAgICAgICBwZ0Jyb3dzZXIucmVwb3J0X2Vycm9yKHJlcy5lcnJvcm1zZywgcmVzLmluZm8pOwog ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICB2YXIgbiA9IHQubmV4 dChpKTsKLSAgICAgICAgICAgICAgICAgIGlmICghbiB8fCAhbi5sZW5ndGgpIHsKLSAgICAgICAg ICAgICAgICAgICAgbiA9IHQucHJldihpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFuIHx8 ICFuLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgIG4gPSB0LnBhcmVudChpKTsKLSAg ICAgICAgICAgICAgICAgICAgICB0LnNldElub2RlKG4sIHRydWUpOwotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB0LnJlbW92ZShp KTsKLSAgICAgICAgICAgICAgICAgIGlmIChuLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAg ICB0LnNlbGVjdChuKTsKLSAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIHBn QnJvd3Nlci5yZW1vdmVUcmVlTm9kZShpLCB0cnVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgIH0sCkBAIC0xMzIwLDkgKzEz MDksMTQgQEAgZGVmaW5lKFsKICAgICAgICAgICBwZ0Jyb3dzZXIuRXZlbnRzLnRyaWdnZXIoCiAg ICAgICAgICAgICAncGdhZG1pbjpicm93c2VyOnRyZWU6dXBkYXRlJywKICAgICAgICAgICAgIF9v bGQsIF9uZXcsIGluZm8sIHsKLSAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oKSB7Cisg ICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKF9pdGVtLCBfbmV3Tm9kZURhdGEsIF9vbGRO b2RlRGF0YSkgeworICAgICAgICAgICAgICAgIHBnQnJvd3Nlci5FdmVudHMudHJpZ2dlcigKKyAg ICAgICAgICAgICAgICAgICdwZ2FkbWluOmJyb3dzZXI6bm9kZTp1cGRhdGVkJywgX2l0ZW0sIF9u ZXdOb2RlRGF0YSwKKyAgICAgICAgICAgICAgICAgIF9vbGROb2RlRGF0YQorICAgICAgICAgICAg ICAgICk7CiAgICAgICAgICAgICAgICAgcGdCcm93c2VyLkV2ZW50cy50cmlnZ2VyKAotICAgICAg ICAgICAgICAgICAgJ3BnYWRtaW46YnJvd3Nlcjpub2RlOnVwZGF0ZWQnLCBfbmV3CisgICAgICAg ICAgICAgICAgICAncGdhZG1pbjpicm93c2VyOm5vZGU6JyArIF9uZXdOb2RlRGF0YS5fdHlwZSAr ICc6dXBkYXRlZCcsCisgICAgICAgICAgICAgICAgICBfaXRlbSwgX25ld05vZGVEYXRhLCBfb2xk Tm9kZURhdGEKICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICB9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9iYWNrdXAvdGVtcGxhdGVzL2JhY2t1 cC9qcy9iYWNrdXAuanMgYi93ZWIvcGdhZG1pbi90b29scy9iYWNrdXAvdGVtcGxhdGVzL2JhY2t1 cC9qcy9iYWNrdXAuanMKaW5kZXggYzQzZGNkMi4uM2I1ODQ1NSAxMDA2NDQKLS0tIGEvd2ViL3Bn YWRtaW4vdG9vbHMvYmFja3VwL3RlbXBsYXRlcy9iYWNrdXAvanMvYmFja3VwLmpzCisrKyBiL3dl Yi9wZ2FkbWluL3Rvb2xzL2JhY2t1cC90ZW1wbGF0ZXMvYmFja3VwL2pzL2JhY2t1cC5qcwpAQCAt MjcwLDcgKzI3MCw3IEBAIFRPRE8gTElTVCBGT1IgQkFDS1VQOgogCiAgICAgICAgIC8vIERlZmlu ZSBsaXN0IG9mIG5vZGVzIG9uIHdoaWNoIGJhY2t1cCBjb250ZXh0IG1lbnUgb3B0aW9uIGFwcGVh cnMKICAgICAgICAgdmFyIGJhY2t1cF9zdXBwb3J0ZWRfbm9kZXMgPSBbCi0gICAgICAgICAgICAg ICdkYXRhYmFzZScsICdzY2hlbWEnLCAndGFibGUnCisgICAgICAgICAgICAgICdkYXRhYmFzZScs ICdzY2hlbWEnLCAndGFibGUnLCAncGFydGl0aW9uJwogICAgICAgICAgICAgXTsKIAogICAgICAg ICAvKioKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlkL19faW5pdF9fLnB5 IGIvd2ViL3BnYWRtaW4vdG9vbHMvZGF0YWdyaWQvX19pbml0X18ucHkKaW5kZXggNjdmNjcyOS4u OTVjODNkZCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvZGF0YWdyaWQvX19pbml0X18u cHkKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGF0YWdyaWQvX19pbml0X18ucHkKQEAgLTEyNyw2 ICsxMjcsMTAgQEAgZGVmIGluaXRpYWxpemVfZGF0YWdyaWQoY21kX3R5cGUsIG9ial90eXBlLCBz aWQsIGRpZCwgb2JqX2lkKToKICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihl cnJvcm1zZz1zdHIobXNnKSkKIAogICAgIHRyeToKKyAgICAgICAgIyBpZiBvYmplY3QgdHlwZSBp cyBwYXJ0aXRpb24gdGhlbiBpdCBpcyBub3RoaW5nIGJ1dCBhIHRhYmxlLgorICAgICAgICBpZiBv YmpfdHlwZSA9PSAncGFydGl0aW9uJzoKKyAgICAgICAgICAgIG9ial90eXBlID0gJ3RhYmxlJwor CiAgICAgICAgICMgR2V0IHRoZSBvYmplY3QgYXMgcGVyIHRoZSBvYmplY3QgdHlwZQogICAgICAg ICBjb21tYW5kX29iaiA9IE9iamVjdFJlZ2lzdHJ5LmdldF9vYmplY3Qob2JqX3R5cGUsIGNvbm5f aWQ9Y29ubl9pZCwgc2lkPXNpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRpZD1kaWQsIG9ial9pZD1vYmpfaWQsIGNtZF90eXBlPWNtZF90eXBlLApA QCAtMjAxLDEyICsyMDUsMTQgQEAgZGVmIHBhbmVsKHRyYW5zX2lkLCBpc19xdWVyeV90b29sLCBl ZGl0b3JfdGl0bGUpOgogICAgIGVsc2U6CiAgICAgICAgIG5ld19icm93c2VyX3RhYiA9ICdmYWxz ZScKIAotICAgIHJldHVybiByZW5kZXJfdGVtcGxhdGUoImRhdGFncmlkL2luZGV4Lmh0bWwiLCBf PWdldHRleHQsIHVuaXF1ZUlkPXRyYW5zX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg aXNfcXVlcnlfdG9vbD1pc19xdWVyeV90b29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ZWRpdG9yX3RpdGxlPWVkaXRvcl90aXRsZSwgc2NyaXB0X3R5cGVfdXJsPXNVUkwsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICBpc19kZXNrdG9wX21vZGU9YXBwLlBHQURNSU5fUlVOVElNRSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2xpbnV4PWlzX2xpbnV4X3BsYXRmb3JtLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbmV3X2Jyb3dzZXJfdGFiPW5ld19icm93c2Vy X3RhYikKKyAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAiZGF0YWdyaWQvaW5k ZXguaHRtbCIsIF89Z2V0dGV4dCwgdW5pcXVlSWQ9dHJhbnNfaWQsCisgICAgICAgIGlzX3F1ZXJ5 X3Rvb2w9aXNfcXVlcnlfdG9vbCwKKyAgICAgICAgZWRpdG9yX3RpdGxlPWVkaXRvcl90aXRsZSwg c2NyaXB0X3R5cGVfdXJsPXNVUkwsCisgICAgICAgIGlzX2Rlc2t0b3BfbW9kZT1hcHAuUEdBRE1J Tl9SVU5USU1FLAorICAgICAgICBpc19saW51eD1pc19saW51eF9wbGF0Zm9ybSwKKyAgICAgICAg aXNfbmV3X2Jyb3dzZXJfdGFiPW5ld19icm93c2VyX3RhYgorICAgICkKIAogCiBAYmx1ZXByaW50 LnJvdXRlKApAQCAtMzQ2LDYgKzM1Miw4IEBAIGRlZiB2YWxpZGF0ZV9maWx0ZXIoc2lkLCBkaWQs IG9ial9pZCk6CiBAbG9naW5fcmVxdWlyZWQKIGRlZiBzY3JpcHQoKToKICAgICAiIiJyZW5kZXIg dGhlIHJlcXVpcmVkIGphdmFzY3JpcHQiIiIKLSAgICByZXR1cm4gUmVzcG9uc2UocmVzcG9uc2U9 cmVuZGVyX3RlbXBsYXRlKCJkYXRhZ3JpZC9qcy9kYXRhZ3JpZC5qcyIsIF89Z2V0dGV4dCksCi0g ICAgICAgICAgICAgICAgICAgIHN0YXR1cz0yMDAsCi0gICAgICAgICAgICAgICAgICAgIG1pbWV0 eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IikKKyAgICByZXR1cm4gUmVzcG9uc2UoCisgICAg ICAgIHJlc3BvbnNlPXJlbmRlcl90ZW1wbGF0ZSgiZGF0YWdyaWQvanMvZGF0YWdyaWQuanMiLCBf PWdldHRleHQpLAorICAgICAgICBzdGF0dXM9MjAwLCBtaW1ldHlwZT0iYXBwbGljYXRpb24vamF2 YXNjcmlwdCIKKyAgICApCisKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlk L3RlbXBsYXRlcy9kYXRhZ3JpZC9qcy9kYXRhZ3JpZC5qcyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2Rh dGFncmlkL3RlbXBsYXRlcy9kYXRhZ3JpZC9qcy9kYXRhZ3JpZC5qcwppbmRleCBlYjg2YTEyLi5j ZGE1YzUzIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi90b29scy9kYXRhZ3JpZC90ZW1wbGF0ZXMv ZGF0YWdyaWQvanMvZGF0YWdyaWQuanMKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGF0YWdyaWQv dGVtcGxhdGVzL2RhdGFncmlkL2pzL2RhdGFncmlkLmpzCkBAIC0yOSw3ICsyOSw3IEBAIGRlZmlu ZShbCiAgICAgICAgIC8vIERlZmluZSBsaXN0IG9mIG5vZGVzIG9uIHdoaWNoIHZpZXcgZGF0YSBv cHRpb24gYXBwZWFycwogICAgICAgICB2YXIgc3VwcG9ydGVkX25vZGVzID0gWwogICAgICAgICAg ICAndGFibGUnLCAndmlldycsICdtdmlldycsCi0gICAgICAgICAgICdmb3JlaWduLXRhYmxlJywg J2NhdGFsb2dfb2JqZWN0JworICAgICAgICAgICAnZm9yZWlnbi10YWJsZScsICdjYXRhbG9nX29i amVjdCcsICdwYXJ0aXRpb24nCiAgICAgICAgIF0sCiAKICAgICAgICAgLyogRW5hYmxlL2Rpc2Fi bGUgVmlldyBkYXRhIG1lbnUgaW4gdG9vbHMgYmFzZWQKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWlu L3Rvb2xzL21haW50ZW5hbmNlL3RlbXBsYXRlcy9tYWludGVuYW5jZS9qcy9tYWludGVuYW5jZS5q cyBiL3dlYi9wZ2FkbWluL3Rvb2xzL21haW50ZW5hbmNlL3RlbXBsYXRlcy9tYWludGVuYW5jZS9q cy9tYWludGVuYW5jZS5qcwppbmRleCA1YWIzYzQ0Li4wZTUxZmQ5IDEwMDY0NAotLS0gYS93ZWIv cGdhZG1pbi90b29scy9tYWludGVuYW5jZS90ZW1wbGF0ZXMvbWFpbnRlbmFuY2UvanMvbWFpbnRl bmFuY2UuanMKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvbWFpbnRlbmFuY2UvdGVtcGxhdGVzL21h aW50ZW5hbmNlL2pzL21haW50ZW5hbmNlLmpzCkBAIC0xNTAsNyArMTUwLDcgQEAgZGVmaW5lKFsK IAogICAgICAgICB2YXIgbWFpbnRlbmFuY2Vfc3VwcG9ydGVkX25vZGVzID0gWwogICAgICAgICAg ICAgICAnZGF0YWJhc2UnLCAndGFibGUnLCAncHJpbWFyeV9rZXknLAotICAgICAgICAgICAgICAn dW5pcXVlX2NvbnN0cmFpbnQnLCAnaW5kZXgnCisgICAgICAgICAgICAgICd1bmlxdWVfY29uc3Ry YWludCcsICdpbmRleCcsICdwYXJ0aXRpb24nCiAgICAgICAgICAgICBdOwogCiAgICAgICAgIC8q KgpAQCAtMTgwLDcgKzE4MCw3IEBAIGRlZmluZShbCiAKICAgICAgICAgdmFyIG1lbnVzID0gW3sK ICAgICAgICAgICBuYW1lOiAnbWFpbnRlbmFuY2UnLCBtb2R1bGU6IHRoaXMsCi0gICAgICAgICAg YXBwbGllczogWyd0b29scyddLCBjYWxsYmFjazogJ2NhbGxiYWNrX21haW50ZW5hY2UnLAorICAg ICAgICAgIGFwcGxpZXM6IFsndG9vbHMnXSwgY2FsbGJhY2s6ICdjYWxsYmFja19tYWludGVuYW5j ZScsCiAgICAgICAgICAgcHJpb3JpdHk6IDEwLCBsYWJlbDogZ2V0dGV4dCgnTWFpbnRlbmFuY2Uu Li4nKSwKICAgICAgICAgICBpY29uOiAnZmEgZmEtd3JlbmNoJywgZW5hYmxlOiBtZW51X2VuYWJs ZWQKICAgICAgICAgfV07CkBAIC0xOTAsNyArMTkwLDcgQEAgZGVmaW5lKFsKICAgICAgICAgICBt ZW51cy5wdXNoKHsKICAgICAgICAgICAgIG5hbWU6ICdtYWludGVuYW5jZV9jb250ZXh0XycgKyBt YWludGVuYW5jZV9zdXBwb3J0ZWRfbm9kZXNbaWR4XSwKICAgICAgICAgICAgIG5vZGU6IG1haW50 ZW5hbmNlX3N1cHBvcnRlZF9ub2Rlc1tpZHhdLCBtb2R1bGU6IHRoaXMsCi0gICAgICAgICAgICBh cHBsaWVzOiBbJ2NvbnRleHQnXSwgY2FsbGJhY2s6ICdjYWxsYmFja19tYWludGVuYWNlJywKKyAg ICAgICAgICAgIGFwcGxpZXM6IFsnY29udGV4dCddLCBjYWxsYmFjazogJ2NhbGxiYWNrX21haW50 ZW5hbmNlJywKICAgICAgICAgICAgIHByaW9yaXR5OiAxMCwgbGFiZWw6IGdldHRleHQoJ01haW50 ZW5hbmNlLi4uJyksCiAgICAgICAgICAgICBpY29uOiAnZmEgZmEtd3JlbmNoJywgZW5hYmxlOiBt ZW51X2VuYWJsZWQKICAgICAgICAgICB9KTsKQEAgLTIwMSw3ICsyMDEsNyBAQCBkZWZpbmUoWwog ICAgICAgLyoKICAgICAgICAgT3BlbiB0aGUgZGlhbG9nIGZvciB0aGUgbWFpbnRlbmFuY2UgZnVu Y3Rpb25hbGl0eQogICAgICAgKi8KLSAgICAgIGNhbGxiYWNrX21haW50ZW5hY2U6IGZ1bmN0aW9u KGFyZ3MsIGl0ZW0pIHsKKyAgICAgIGNhbGxiYWNrX21haW50ZW5hbmNlOiBmdW5jdGlvbihhcmdz LCBpdGVtKSB7CiAgICAgICAgIHZhciBpID0gaXRlbSB8fCBwZ0Jyb3dzZXIudHJlZS5zZWxlY3Rl ZCgpLAogICAgICAgICAgIHNlcnZlcl9kYXRhID0gbnVsbDsKIApAQCAtMzIwLDcgKzMyMCwxMCBA QCBkZWZpbmUoWwogICAgICAgICAgICAgICAgICAgaWYgKHRyZWVJbmZvLnNjaGVtYSAhPSB1bmRl ZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgc2NoZW1hID0gdHJlZUluZm8uc2NoZW1hLl9s YWJlbDsKICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGlmICh0cmVlSW5m by50YWJsZSAhPSB1bmRlZmluZWQpIHsKKworICAgICAgICAgICAgICAgICAgaWYgKHRyZWVJbmZv LnBhcnRpdGlvbiAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGFibGUgPSB0 cmVlSW5mby5wYXJ0aXRpb24uX2xhYmVsOworICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICAo dHJlZUluZm8udGFibGUgIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgIHRhYmxl ID0gdHJlZUluZm8udGFibGUuX2xhYmVsOwogICAgICAgICAgICAgICAgICAgfQogCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi90b29scy9yZXN0b3JlL3RlbXBsYXRlcy9yZXN0b3JlL2pzL3Jlc3Rv cmUuanMgYi93ZWIvcGdhZG1pbi90b29scy9yZXN0b3JlL3RlbXBsYXRlcy9yZXN0b3JlL2pzL3Jl c3RvcmUuanMKaW5kZXggYzIzZDllMy4uMGRhMDAwNCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4v dG9vbHMvcmVzdG9yZS90ZW1wbGF0ZXMvcmVzdG9yZS9qcy9yZXN0b3JlLmpzCisrKyBiL3dlYi9w Z2FkbWluL3Rvb2xzL3Jlc3RvcmUvdGVtcGxhdGVzL3Jlc3RvcmUvanMvcmVzdG9yZS5qcwpAQCAt MjI4LDcgKzIyOCw4IEBAIGRlZmluZShbCiAgICAgICAgIHZhciByZXN0b3JlX3N1cHBvcnRlZF9u b2RlcyA9IFsKICAgICAgICAgICAgICAgJ2RhdGFiYXNlJywgJ3NjaGVtYScsCiAgICAgICAgICAg ICAgICd0YWJsZScsICdmdW5jdGlvbicsCi0gICAgICAgICAgICAgICd0cmlnZ2VyJywgJ2luZGV4 JworICAgICAgICAgICAgICAndHJpZ2dlcicsICdpbmRleCcsCisgICAgICAgICAgICAgICdwYXJ0 aXRpb24nCiAgICAgICAgICAgICBdOwogCiAgICAgICAgIC8qKgpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vdXRpbHMvX19pbml0X18ucHkgYi93ZWIvcGdhZG1pbi91dGlscy9fX2luaXRfXy5weQpp bmRleCA1NTBiYWQyLi43MDFhMzhjIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi91dGlscy9fX2lu aXRfXy5weQorKysgYi93ZWIvcGdhZG1pbi91dGlscy9fX2luaXRfXy5weQpAQCAtMjksNiArMjks NyBAQCBjbGFzcyBQZ0FkbWluTW9kdWxlKEJsdWVwcmludCk6CiAgICAgICAgIGt3YXJncy5zZXRk ZWZhdWx0KCd0ZW1wbGF0ZV9mb2xkZXInLCAndGVtcGxhdGVzJykKICAgICAgICAga3dhcmdzLnNl dGRlZmF1bHQoJ3N0YXRpY19mb2xkZXInLCAnc3RhdGljJykKICAgICAgICAgc2VsZi5zdWJtb2R1 bGVzID0gW10KKyAgICAgICAgc2VsZi5wYXJlbnRtb2R1bGVzID0gW10KIAogICAgICAgICBzdXBl cihQZ0FkbWluTW9kdWxlLCBzZWxmKS5fX2luaXRfXyhuYW1lLCBpbXBvcnRfbmFtZSwgKiprd2Fy Z3MpCiAKQEAgLTU5LDYgKzYwLDggQEAgY2xhc3MgUGdBZG1pbk1vZHVsZShCbHVlcHJpbnQpOgog ICAgICAgICBzdXBlcihQZ0FkbWluTW9kdWxlLCBzZWxmKS5yZWdpc3RlcihhcHAsIG9wdGlvbnMs IGZpcnN0X3JlZ2lzdHJhdGlvbikKIAogICAgICAgICBmb3IgbW9kdWxlIGluIHNlbGYuc3VibW9k dWxlczoKKyAgICAgICAgICAgIGlmIGZpcnN0X3JlZ2lzdHJhdGlvbjoKKyAgICAgICAgICAgICAg ICBtb2R1bGUucGFyZW50bW9kdWxlcy5hcHBlbmQoc2VsZikKICAgICAgICAgICAgIGFwcC5yZWdp c3Rlcl9ibHVlcHJpbnQobW9kdWxlKQogCiAgICAgZGVmIGdldF9vd25fc3R5bGVzaGVldHMoc2Vs Zik6CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi91dGlscy9leGNlcHRpb24ucHkgYi93ZWIvcGdh ZG1pbi91dGlscy9leGNlcHRpb24ucHkKaW5kZXggNTdjMzIyNC4uNzdkNTlkYSAxMDA2NDQKLS0t IGEvd2ViL3BnYWRtaW4vdXRpbHMvZXhjZXB0aW9uLnB5CisrKyBiL3dlYi9wZ2FkbWluL3V0aWxz L2V4Y2VwdGlvbi5weQpAQCAtNDAsMyArNDAsMTEgQEAgY2xhc3MgQ29ubmVjdGlvbkxvc3QoSFRU UEV4Y2VwdGlvbik6CiAgICAgICAgICAgICAgICAgJ2Nvbm5faWQnOiBzZWxmLmNvbm5faWQKICAg ICAgICAgICAgIH0KICAgICAgICAgKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAg IHJldHVybiAiQ29ubmVjdGlvbiAoaWQgI3syfSkgbG9zdCBmb3IgdGhlIHNlcnZlciAoI3swfSkg b24gIiBcCisgICAgICAgICAgICAgICAiZGF0YWJhc2UgKHsxfSkiLmZvcm1hdChzZWxmLnNpZCwg c2VsZi5kYiwgc2VsZi5jb25uX2lkKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAg ICByZXR1cm4gIkNvbm5lY3Rpb24gKGlkICN7Mn0pIGxvc3QgZm9yIHRoZSBzZXJ2ZXIgKCN7MH0p IG9uICIgXAorICAgICAgICAgICAgICAgImRhdGFiYXNlICh7MX0pIi5mb3JtYXQoc2VsZi5zaWQs IHNlbGYuZGIsIHNlbGYuY29ubl9pZCkK --001a113f8e7e5413490553b1de29--