Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jJvLR-0007T9-3I for pgadmin-hackers@arkaria.postgresql.org; Thu, 02 Apr 2020 08:37:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jJvLP-0000k2-Cg for pgadmin-hackers@arkaria.postgresql.org; Thu, 02 Apr 2020 08:36:59 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jJvLO-0000jI-Uz for pgadmin-hackers@lists.postgresql.org; Thu, 02 Apr 2020 08:36:59 +0000 Received: from mail-lf1-x141.google.com ([2a00:1450:4864:20::141]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1jJvLL-0000NQ-Vs for pgadmin-hackers@postgresql.org; Thu, 02 Apr 2020 08:36:58 +0000 Received: by mail-lf1-x141.google.com with SMTP id j17so1990975lfe.7 for ; Thu, 02 Apr 2020 01:36:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=GYbDEtKO12hbnR7Tdo4PwU/9NFe3aGJWB86rKkhKB1U=; b=Ac/zUzWNwk7nrSm16Z7nNaIsJlVLF0kijXZfmjXQ04LqJuiBifjHTCqvd+uCC3+bdG NeqYMY9lpIHalOBnbSjW3bHmW2m2YqNG2HccJ3q+zmmL61EB0A3XpuDIasY7jQsT1SvF Zbxc369rLEPBp58CpSyONNAefYXMbo7eWnJOKrtx+7+XAKldEBj48G4F334BWaDzZzjK uFvN8BLGMLkZ4sQbC3NaDa0v/YTQ+rOApblSrWLcX7pXVRlz6l+ZdIRCoipolKkRxFaN V2w7cafCa8GaiQWKueFaYZ5pbxAcV3DkxFIHj48ND4QzspeyL5n6JFRzjmSJrayrCjT5 kc+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=GYbDEtKO12hbnR7Tdo4PwU/9NFe3aGJWB86rKkhKB1U=; b=KfnSeGe5inrqI0e7mB5SHpPDgc4vDbrZd5hOShbvmJTz7yd6E+/u+iA4EKgj0p7wsu 4SSV1mXv38gPms8vFJ48+lhhgCUKSQYCz/xlSIpMcjDrr5ac0OqBo9LSEtaNRQlLsOAh XA6EOqlnFdf8ZEzny5QONzmIAygv9GW46pqp9LDsVTbkwmGJOHv/ZlUufntDt6C4W4Sj pDdTIjrXNI81PorNeqch2goYnQ6eZud1lfGEjkC0T70a3cyHVXCGq4UuMxMKf7q5S4Y+ AH2mg9A6buPdvf39pZmZjtQtuo5TJAGPwHb1yG3Bz2Lhc+RedcuWgBQ+hlkHBSXS+/Bt UHIQ== X-Gm-Message-State: AGi0PuZ3mJrSZjZRB6U/QzXjFKRuFcZ61NnB1Ta2yVm2DIxIBKSlURlS 1E281ShdrR7sh4FZGgwpoY8FQMbdSTD9G1F29HjgxGbkg6oJXP/O1Scw3LNIPNUZoKxNgoRpj61 nbusjsQn5RyUPyfarxJsgcjp0ZE1uh3qXzW+wSlm7GCLBaAA8h8zpYzYeHu/zidfLL0cm2MqRoo coNZZnW11mTn0iX9G9A3FA1tJlnMgOJNwXJnpxYG9m544Zu3mMVSs= X-Google-Smtp-Source: APiQypKuLy8fIPvfbFQfDvD60a5cxQlCK7igOhmsnLYSbCRJi2bJ0ffDZfbcszS9OAPuyPGaoacMYoDRTNjWumiMo3U= X-Received: by 2002:ac2:41d3:: with SMTP id d19mr1441372lfi.57.1585816614762; Thu, 02 Apr 2020 01:36:54 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Khushboo Vashi Date: Thu, 2 Apr 2020 14:06:47 +0530 Message-ID: Subject: Re: [pgAdmin4][Patch] - RM 2186 - Support external authentication sources [LDAP] To: Dave Page Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary="00000000000000beb405a24ab456" X-CLOUD-SEC-AV-Info: edb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --00000000000000beb405a24ab456 Content-Type: multipart/alternative; boundary="00000000000000beb105a24ab454" --00000000000000beb105a24ab454 Content-Type: text/plain; charset="UTF-8" Hi, Resending the patch. Missed the requirements.txt file in the previous patch. Thanks, Khushboo On Wed, Apr 1, 2020 at 5:38 PM Khushboo Vashi < khushboo.vashi@enterprisedb.com> wrote: > Hi, > > Please find the attached updated patch which includes the review comments > given in the review meeting: > > 1. Do not store password for ldap user in sqlite database > 2. Forgot Password : Give error to ldap users > 3. User Management dialog changes > 4. Authentication source display besides username / email after login > > Thanks, > Khushboo > > > On Tue, Mar 24, 2020 at 3:20 PM Khushboo Vashi < > khushboo.vashi@enterprisedb.com> wrote: > >> Please disregard my previous patch, attached the updated patch. :) >> >> >> On Tue, Mar 24, 2020 at 10:32 AM Khushboo Vashi < >> khushboo.vashi@enterprisedb.com> wrote: >> >>> Please disregard my previous patch, attached the updated patch. >>> >>> On Tue, Mar 24, 2020 at 10:29 AM Khushboo Vashi < >>> khushboo.vashi@enterprisedb.com> wrote: >>> >>>> Hi, >>>> >>>> Please find the attached updated patch. >>>> >>>> >>>> On Tue, Mar 17, 2020 at 4:11 PM Dave Page wrote: >>>> >>>>> Hi >>>>> >>>>> On Tue, Mar 17, 2020 at 10:24 AM Khushboo Vashi < >>>>> khushboo.vashi@enterprisedb.com> wrote: >>>>> >>>>>> Hi Dave, >>>>>> >>>>>> Thanks for the review. >>>>>> >>>>>> On Tue, Mar 17, 2020 at 3:42 PM Dave Page wrote: >>>>>> >>>>>>> Hi >>>>>>> >>>>>>> 30 second read of the first version of the patch... >>>>>>> >>>>>>> - Please move the configuration into config.py. Users should never >>>>>>> have to modify a distributed file (it messes up packaging). I don't see any >>>>>>> reason to use a different file just for auth config. >>>>>>> >>>>>>> There are many settings for the LDAP, and in the future we will add >>>>>> other external sources also, so I thought it would be better if we have >>>>>> different file for the authentication. >>>>>> >>>>> >>>>> Sure, but our config file is small compared to many. Splitting things >>>>> out is more confusing for users. If they want to do that themselves of >>>>> course, they can add a config_local.py file which includes other files as >>>>> needed. >>>>> >>>> Fixed. >>>> >>>>> >>>>> >>>>>> - I think all config options should be prefixed with LDAP_ as we may >>>>>>> have things like CERT_FILE for other purposes too. >>>>>>> >>>>>>> Sure. >>>>>> >>>>> Done. >>>> >>>>> - I don't see any test cases. >>>>>>> >>>>>>> I will think about this, as right now no idea how to write test >>>>>> cases for this. >>>>>> >>>>> >>>>> It should be fairly straightforward to write tests for some of the >>>>> functions in the auth classes. For testing the actual LDAP stuff, we >>>>> probably need to add LDAP config options to test_config.json, and only if >>>>> present, run the tests. That would probably need to support a list of LDAP >>>>> servers, so we can test with different configurations (LDAP, LDAPS, >>>>> LDAP_STARTTLS, AD etc). >>>>> >>>>> >>>> Done. >>>> >>>> Thanks, >>>> Khushboo >>>> >>>>> Thanks. >>>>>>> >>>>>>> Thanks, >>>>>> Khushboo >>>>>> >>>>>>> >>>>>>> On Tue, Mar 17, 2020 at 8:55 AM Khushboo Vashi < >>>>>>> khushboo.vashi@enterprisedb.com> wrote: >>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> Please find the attached patch to support LDAP Authentication in >>>>>>>> Server mode. >>>>>>>> To test the patch, config_auth.py needs to be configured for LDAP >>>>>>>> configurations. The config settings are explained in this file in detail. >>>>>>>> After configuring the parameters, start the pgadmin server in Server mode >>>>>>>> and connect with LDAP server with the valid user via login page. >>>>>>>> >>>>>>>> I have tested this patch with ldap and ldap + ssl/tls. With the >>>>>>>> TLS, I have used the default config of ldap3 without certificates. >>>>>>>> >>>>>>>> @Dave, can you please review this patch, as you have a better >>>>>>>> understanding of LDAP and you can easily pointed out if I have missed >>>>>>>> anything. >>>>>>>> >>>>>>>> Note: For the document update I will create the task and assign to >>>>>>>> Nidhi for the same. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Khushboo >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Dave Page >>>>>>> Blog: http://pgsnake.blogspot.com >>>>>>> Twitter: @pgsnake >>>>>>> >>>>>>> EnterpriseDB UK: http://www.enterprisedb.com >>>>>>> The Enterprise PostgreSQL Company >>>>>>> >>>>>> >>>>> >>>>> -- >>>>> Dave Page >>>>> Blog: http://pgsnake.blogspot.com >>>>> Twitter: @pgsnake >>>>> >>>>> EnterpriseDB UK: http://www.enterprisedb.com >>>>> The Enterprise PostgreSQL Company >>>>> >>>> --00000000000000beb105a24ab454 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

Resending the patch.=C2=A0
Missed the requirements.txt file in the previous patch.

Thanks,
Khushboo

On Wed, Apr 1, 2020 at 5:38 PM Khus= hboo Vashi <khushboo.= vashi@enterprisedb.com> wrote:
Hi,

Please find t= he attached updated patch which includes the review comments given in the r= eview meeting:

1. Do not store password=C2=A0for l= dap user in sqlite database
2. Forgot Password : Give error to ld= ap users
3. User Management dialog changes=C2=A0
4. Aut= hentication source display besides username / email after login
<= br>
Thanks,
Khushboo


On Tue, Mar 24= , 2020 at 3:20 PM Khushboo Vashi <khushboo.vashi@enterprisedb.com> wrot= e:
Please disregard my previous patch, attached the updat= ed patch. :)


On Tue, Mar 24, 2020 at 10:32 AM Khushboo Vas= hi <khushboo.vashi@enterprisedb.com> wrote:
Please disregard my previ= ous patch, attached the updated patch.

=
On Tue, Mar 24, 2020 at 10:29 AM Khus= hboo Vashi <khushboo.vashi@enterprisedb.com> wrote:
H= i,

Please find the attached updated patch.

On Tue, Mar 17, 2020 at 4:11 PM Dave Page <dpage@pgadmin.org> wrote:
=
Hi<= /div>
O= n Tue, Mar 17, 2020 at 10:24 AM Khushboo Vashi <khushboo.vashi@enterprisedb.co= m> wrote:
Hi Dave,

Thanks for the rev= iew.

On Tue, Mar 17, 2020 at 3:42 PM Dave Page <dpage@pgadmin.org> wrote:
Hi

=
30 second read of the first version of the patch...
- Please move the configuration into config.py. Users should n= ever have to modify a distributed file (it messes up packaging). I don'= t see any reason to use a different file just for auth config.
There are many settings for the LDAP, and i= n the future we will add other external sources also, so I thought it would= be better if we have different file for the authentication.

Sure, but our config file is small comp= ared to many. Splitting things out is more confusing for users. If they wan= t to do that themselves of course, they can add a config_local.py file whic= h includes other files as needed.
=
Fixed.=C2=A0
=C2=A0
=
- I think all config options should be prefixed with LDAP_ as we= may have things like CERT_FILE for other purposes too.

Sure.=C2=A0
Done.=C2=A0
<= /div>
- I don't see any test cases.

I will think about this, as right now no idea how to write tes= t cases for this.=C2=A0

I= t should be fairly straightforward to write tests for some of the functions= in the auth classes. For testing the actual LDAP stuff, we probably need t= o add LDAP config options to test_config.json, and only if present, run the= tests. That would probably need to support a list of LDAP servers, so we c= an test with different configurations (LDAP, LDAPS, LDAP_STARTTLS, AD etc).=
=C2=A0
Done.

Thanks,
Khushboo
Thanks.

Thanks,
Khushboo=C2=A0

On Tue, Mar 17, 2020 at 8:55 AM Khushboo Vash= i <= khushboo.vashi@enterprisedb.com> wrote:
Hi,

Pl= ease find the attached patch to support LDAP Authentication in Server mode.=
To test the patch, config_auth.py needs to be configured for LDA= P configurations. The config settings are explained in this file in detail.= After configuring the parameters, start the pgadmin server in Server mode = and connect with LDAP server with the valid user via login page.
=
I have tested this patch with ldap and ldap=C2=A0+ ssl/tls. = With the TLS, I have used the default config of ldap3 without certificates.=

@Dave, can you please review this patch, as you h= ave a better understanding of LDAP and you can easily pointed out if I have= missed anything.

Note: For the document update I = will create the task and assign to Nidhi for the same.

Thanks,
Khushboo


--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB= UK: http://www.e= nterprisedb.com
The Enterprise PostgreSQL Company


--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB= UK: http://www.e= nterprisedb.com
The Enterprise PostgreSQL Company
--00000000000000beb105a24ab454-- --00000000000000beb405a24ab456 Content-Type: application/octet-stream; name="RM_2186_v3.patch" Content-Disposition: attachment; filename="RM_2186_v3.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k8ii8e4p0 ZGlmZiAtLWdpdCBhL3JlcXVpcmVtZW50cy50eHQgYi9yZXF1aXJlbWVudHMudHh0CmluZGV4IGYw Y2M3MTcxNS4uN2Y1ZjVmMmNjIDEwMDY0NAotLS0gYS9yZXF1aXJlbWVudHMudHh0CisrKyBiL3Jl cXVpcmVtZW50cy50eHQKQEAgLTM5LDMgKzM5LDQgQEAgcHl0aG9uLWRhdGV1dGlsPj0yLjguMAog U1FMQWxjaGVteT49MS4zLjEzCiBGbGFzay1TZWN1cml0eS1Ub28+PTMuMC4wCiBzc2h0dW5uZWw+ PTAuMS40CitsZGFwMz49Mi41LjEKZGlmZiAtLWdpdCBhL3dlYi9jb25maWcucHkgYi93ZWIvY29u ZmlnLnB5CmluZGV4IGY1MDhmOGZjNi4uMzM0M2Y0YjZkIDEwMDY0NAotLS0gYS93ZWIvY29uZmln LnB5CisrKyBiL3dlYi9jb25maWcucHkKQEAgLTQ4OCw2ICs0ODgsNjUgQEAgTUFTVEVSX1BBU1NX T1JEX1JFUVVJUkVEID0gVHJ1ZQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIEVOSEFOQ0VEX0NPT0tJRV9Q Uk9URUNUSU9OID0gVHJ1ZQogCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBFeHRlcm5hbCBBdXRoZW50 aWNhdGlvbiBTb3VyY2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIERlZmF1bHQgc2V0dGluZyBp cyBpbnRlcm5hbAorIyBFeHRlcm5hbCBTdXBwb3J0ZWQgU291cmNlczogbGRhcAorIyBNdWx0aXBs ZSBhdXRoZW50aWNhdGlvbiBjYW4gYmUgYWNoaWV2ZWQgYnkgc2V0dGluZyB0aGlzIHBhcmFtZXRl ciB0bworIyBbJ2xkYXAnLCAnaW50ZXJuYWwnXS4gcGdBZG1pbiB3aWxsIGF1dGhlbnRpY2F0ZSB0 aGUgdXNlciB3aXRoIGxkYXAgZmlyc3QsCisjIGluIGNhc2Ugb2YgZmFpbHVyZSBpbnRlcm5hbCBh dXRoZW50aWNhdGlvbiB3aWxsIGJlIGRvbmUuCisKK0FVVEhFTlRJQ0FUSU9OX1NPVVJDRVMgPSBb J2ludGVybmFsJ10KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTERBUCBDb25maWd1cmF0aW9uCisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworCisjIEFmdGVyIGxkYXAgYXV0aGVudGljYXRpb24sIHVzZXIgd2ls bCBiZSBhZGRlZCBpbnRvIHRoZSBTUUxpdGUgZGF0YWJhc2UKKyMgYXV0b21hdGljYWxseSwgaWYg c2V0IHRvIFRydWUuCisjIFNldCBpdCB0byBGYWxzZSwgaWYgdXNlciBzaG91bGQgbm90IGJlIGFk ZGVkIGF1dG9tYXRpY2FsbHksCisjIGluIHRoaXMgY2FzZSBBZG1pbiBoYXMgdG8gYWRkIHRoZSB1 c2VyIG1hbnVhbGx5IGluIHRoZSBTUUxpdGUgZGF0YWJhc2UuCisKK0xEQVBfQVVUT19DUkVBVEVf VVNFUiA9IFRydWUKKworIyBDb25uZWN0aW9uIHRpbWVvdXQKK0xEQVBfQ09OTkVDVElPTl9USU1F T1VUID0gMTAKKworIyBTZXJ2ZXIgY29ubmVjdGlvbiBkZXRhaWxzIChSRVFVSVJFRCkKKyMgZXhh bXBsZTogbGRhcDovLzxpcC1hZGRyZXNzPjo8cG9ydD4gb3IgbGRhcDovLzxob3N0bmFtZT46PHBv cnQ+CitMREFQX1NFUlZFUl9VUkkgPSAnbGRhcDovLzxpcC1hZGRyZXNzPjo8cG9ydD4nCisKKyMg QmFzZUROIChSRVFVSVJFRCkKKyMgQUQgZXhhbXBsZToKKyMgKCYob2JqZWN0Q2xhc3M9dXNlciko bWVtYmVyb2Y9Q049TVlHUk9VUCxDTj1Vc2VycyxkYz1leGFtcGxlLGRjPWNvbSkpCisjIE9wZW5M REFQIGV4YW1wbGU6IENOPVVzZXJzLGRjPWV4YW1wbGUsZGM9Y29tCitMREFQX0JBU0VfRE4gPSAn PEJhc2UtRE4+JworCisjIFRoZSBMREFQIGF0dHJpYnV0ZSBjb250YWluaW5nIHVzZXIgbmFtZXMu IEluIE9wZW5MREFQLCB0aGlzIG1heSBiZSAndWlkJworIyB3aGlsc3QgaW4gQUQsICdzQU1BY2Nv dW50TmFtZScgbWlnaHQgYmUgYXBwcm9wcmlhdGUuIChSRVFVSVJFRCkKK0xEQVBfVVNFUk5BTUVf QVRUUklCVVRFID0gJzxVc2VyLWlkPicKKworIyBTZWFyY2ggbGRhcCBmb3IgZnVydGhlciBhdXRo ZW50aWNhdGlvbgorTERBUF9TRUFSQ0hfQkFTRV9ETiA9ICc8U2VhcmNoLUJhc2UtRE4+JworCisj IEZpbHRlciBzdHJpbmcgZm9yIHRoZSB1c2VyIHNlYXJjaC4KKyMgRm9yIE9wZW5MREFQLCAnKGNu PSopJyBtYXkgd2VsbCBiZSBlbm91Z2guCisjIEZvciBBRCwgeW91IG1pZ2h0IHVzZSAnKG9iamVj dENsYXNzPXVzZXIpJyAoUkVRVUlSRUQpCitMREFQX1NFQVJDSF9GSUxURVIgPSAnKG9iamVjdGNs YXNzPSopJworCisjIFNlYXJjaCBzY29wZSBmb3IgdXNlcnMgKG9uZSBvZiBCQVNFLCBMRVZFTCBv ciBTVUJUUkVFKQorTERBUF9TRUFSQ0hfU0NPUEUgPSAnU1VCVFJFRScKKworIyBVc2UgVExTPyBJ ZiB0aGUgVVJJIHNjaGVtZSBpcyBsZGFwczovLywgdGhpcyBpcyBpZ25vcmVkLgorTERBUF9VU0Vf U1RBUlRUTFMgPSBGYWxzZQorCisjIFRMUy9TU0wgY2VydGlmaWNhdGVzLiBTcGVjaWZ5IGlmIHJl cXVpcmVkLCBvdGhlcndpc2UgbGVhdmUgZW1wdHkKK0xEQVBfQ0FfQ0VSVF9GSUxFID0gJycKK0xE QVBfQ0VSVF9GSUxFID0gJycKK0xEQVBfS0VZX0ZJTEUgPSAnJworCiAjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwogIyBMb2NhbCBjb25maWcgc2V0dGluZ3MKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQg YS93ZWIvbWlncmF0aW9ucy92ZXJzaW9ucy83ZmVkZjg1MzE4MDJfLnB5IGIvd2ViL21pZ3JhdGlv bnMvdmVyc2lvbnMvN2ZlZGY4NTMxODAyXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAuLjg5NDAxNjg2YQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9taWdyYXRpb25zL3Zl cnNpb25zLzdmZWRmODUzMTgwMl8ucHkKQEAgLTAsMCArMSw1MSBAQAorCisiIiJlbXB0eSBtZXNz YWdlCisKK1JldmlzaW9uIElEOiA3ZmVkZjg1MzE4MDIKK1JldmlzZXM6IGFmZjE0MzZlM2M4Ywor Q3JlYXRlIERhdGU6IDIwMjAtMDItMjYgMTE6MjQ6NTQuMzUzMjg4CisKKyIiIgorZnJvbSBhbGVt YmljIGltcG9ydCBvcAoraW1wb3J0IHNxbGFsY2hlbXkgYXMgc2EKK2Zyb20gcGdhZG1pbi5tb2Rl bCBpbXBvcnQgZGIKKworIyByZXZpc2lvbiBpZGVudGlmaWVycywgdXNlZCBieSBBbGVtYmljLgor cmV2aXNpb24gPSAnN2ZlZGY4NTMxODAyJworZG93bl9yZXZpc2lvbiA9ICdhZmYxNDM2ZTNjOGMn CiticmFuY2hfbGFiZWxzID0gTm9uZQorZGVwZW5kc19vbiA9IE5vbmUKKworCitkZWYgdXBncmFk ZSgpOgorCisgICAgZGIuZW5naW5lLmV4ZWN1dGUoIkFMVEVSIFRBQkxFIHVzZXIgUkVOQU1FIFRP IHVzZXJfb2xkIikKKworICAgIGRiLmVuZ2luZS5leGVjdXRlKCIiIgorICAgICAgICBDUkVBVEUg VEFCTEUgdXNlciAoCisgICAgICAgICAgICBpZCBJTlRFR0VSIE5PVCBOVUxMLAorICAgICAgICAg ICAgdXNlcm5hbWUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMLAorICAgICAgICAgICAgZW1haWwgVkFS Q0hBUigyNTYpLAorICAgICAgICAgICAgcGFzc3dvcmQgVkFSQ0hBUigyNTYpLAorICAgICAgICAg ICAgYWN0aXZlIEJPT0xFQU4gTk9UIE5VTEwsCisgICAgICAgICAgICBjb25maXJtZWRfYXQgREFU RVRJTUUsCisgICAgICAgICAgICBtYXN0ZXJwYXNzX2NoZWNrIFZBUkNIQVIoMjU2KSwKKyAgICAg ICAgICAgIGF1dGhfc291cmNlIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBERUZBVUxUICdpbnRlcm5h bCcsCisgICAgICAgICAgICBQUklNQVJZIEtFWSAoaWQpLAorICAgICAgICAgICAgVU5JUVVFICh1 c2VybmFtZSwgYXV0aF9zb3VyY2UpLAorICAgICAgICAgICAgQ0hFQ0sgKGFjdGl2ZSBJTiAoMCwg MSkpCisgICAgICAgICk7CisgICAgICAgICIiIikKKworICAgIGRiLmVuZ2luZS5leGVjdXRlKCIi IgorICAgICAgICBJTlNFUlQgSU5UTyB1c2VyICgKKyAgICAgICAgICAgIGlkLCB1c2VybmFtZSwg ZW1haWwsIHBhc3N3b3JkLCBhY3RpdmUsIGNvbmZpcm1lZF9hdCwgbWFzdGVycGFzc19jaGVjawor ICAgICAgICApIFNFTEVDVAorICAgICAgICAgICAgaWQsIGVtYWlsLCBlbWFpbCwgcGFzc3dvcmQs IGFjdGl2ZSwgY29uZmlybWVkX2F0LCBtYXN0ZXJwYXNzX2NoZWNrCisgICAgICAgIEZST00gdXNl cl9vbGQiIiIpCisKKyAgICBkYi5lbmdpbmUuZXhlY3V0ZSgiRFJPUCBUQUJMRSB1c2VyX29sZCIp CisKKworZGVmIGRvd25ncmFkZSgpOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL3dlYi9wZ0FkbWlu NC5weSBiL3dlYi9wZ0FkbWluNC5weQppbmRleCA4MWVmNmMzOTYuLmI5M2I3Y2ZkNCAxMDA2NDQK LS0tIGEvd2ViL3BnQWRtaW40LnB5CisrKyBiL3dlYi9wZ0FkbWluNC5weQpAQCAtMTYwLDYgKzE2 MCwxNiBAQCBpZiAnUEdBRE1JTl9JTlRfS0VZJyBpbiBnbG9iYWxzKCk6CiBlbHNlOgogICAgIGFw cC5QR0FETUlOX0lOVF9LRVkgPSAnJwogCisjIEF1dGhlbnRpY2F0aW9uIHNvdXJjZXMKK2FwcC5Q R0FETUlOX0RFRkFVTFRfQVVUSF9TT1VSQ0UgPSAnaW50ZXJuYWwnCitpZiBsZW4oY29uZmlnLkFV VEhFTlRJQ0FUSU9OX1NPVVJDRVMpID4gMDoKKyAgICBhcHAuUEdBRE1JTl9FWFRFUk5BTF9BVVRI X1NPVVJDRSA9IGNvbmZpZy5BVVRIRU5USUNBVElPTl9TT1VSQ0VTWzBdCitlbHNlOgorICAgIGFw cC5QR0FETUlOX0VYVEVSTkFMX0FVVEhfU09VUkNFID0gYXBwLlBHQURNSU5fREVGQVVMVF9BVVRI X1NPVVJDRQorCithcHAubG9nZ2VyLmRlYnVnKAorICAgICJBdXRoZW50aWNhdGlvbiBTb3VyY2U6 ICVzIiAlIGFwcC5QR0FETUlOX0RFRkFVTFRfQVVUSF9TT1VSQ0UpCisKICMgT3V0cHV0IGEgc3Rh cnR1cCBtZXNzYWdlIGlmIHdlJ3JlIG5vdCB1bmRlciB0aGUgcnVudGltZSBhbmQgc3RhcnR1cC4K ICMgSWYgd2UncmUgdW5kZXIgV1NHSSwgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGlz CiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vX19p bml0X18ucHkgYi93ZWIvcGdhZG1pbi9fX2luaXRfXy5weQppbmRleCA4MjBjODAxNWEuLjVjYTJh ZTY3YSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vX19pbml0X18ucHkKKysrIGIvd2ViL3BnYWRt aW4vX19pbml0X18ucHkKQEAgLTM4LDcgKzM4LDcgQEAgZnJvbSBkYXRldGltZSBpbXBvcnQgdGlt ZWRlbHRhCiBmcm9tIHBnYWRtaW4uc2V0dXAgaW1wb3J0IGdldF92ZXJzaW9uLCBzZXRfdmVyc2lv bgogZnJvbSBwZ2FkbWluLnV0aWxzLmFqYXggaW1wb3J0IGludGVybmFsX3NlcnZlcl9lcnJvcgog ZnJvbSBwZ2FkbWluLnV0aWxzLmNzcmYgaW1wb3J0IHBnQ1NSRlByb3RlY3QKLQorZnJvbSBwZ2Fk bWluIGltcG9ydCBhdXRoZW50aWNhdGUKIAogIyBJZiBzY3JpcHQgaXMgcnVubmluZyB1bmRlciBw eXRob24zLCBpdCB3aWxsIG5vdCBoYXZlIHRoZSB4cmFuZ2UgZnVuY3Rpb24KICMgZGVmaW5lZApA QCAtMzk4LDYgKzM5OCw3IEBAIGRlZiBjcmVhdGVfYXBwKGFwcF9uYW1lPU5vbmUpOgogICAgICMg TG9hZCBhbGwgYXZhaWxhYmxlIHNlcnZlciBkcml2ZXJzCiAgICAgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK ICAgICBkcml2ZXIuaW5pdF9hcHAoYXBwKQorICAgIGF1dGhlbnRpY2F0ZS5pbml0X2FwcChhcHAp CiAKICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgICMgUmVnaXN0ZXIgbGFuZ3VhZ2UgdG8gdGhl IHByZWZlcmVuY2VzIGFmdGVyIGxvZ2luCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9hdXRoZW50 aWNhdGUvX19pbml0X18ucHkgYi93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvX19pbml0X18ucHkK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi42M2Y1MjRlMjMKLS0tIC9kZXYv bnVsbAorKysgYi93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvX19pbml0X18ucHkKQEAgLTAsMCAr MSwxNTYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwg VG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAyMCwgVGhlIHBnQWRtaW4gRGV2ZWxv cG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3Jl U1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyIiIkEgYmx1ZXByaW50IG1vZHVs ZSBpbXBsZW1lbnRpbmcgdGhlIEF1dGhlbnRpY2F0aW9uLiIiIgorCitpbXBvcnQgZmxhc2sKK2lt cG9ydCBwaWNrbGUKK2Zyb20gZmxhc2sgaW1wb3J0IGN1cnJlbnRfYXBwLCBmbGFzaAorZnJvbSBm bGFza19iYWJlbGV4IGltcG9ydCBnZXR0ZXh0Citmcm9tIGZsYXNrX3NlY3VyaXR5IGltcG9ydCBj dXJyZW50X3VzZXIKK2Zyb20gZmxhc2tfc2VjdXJpdHkudmlld3MgaW1wb3J0IF9zZWN1cml0eSwg X2N0eAorZnJvbSBmbGFza19zZWN1cml0eS51dGlscyBpbXBvcnQgY29uZmlnX3ZhbHVlLCBnZXRf cG9zdF9sb2dvdXRfcmVkaXJlY3QKK2Zyb20gZmxhc2sgaW1wb3J0IHNlc3Npb24KKworaW1wb3J0 IGNvbmZpZworZnJvbSBwZ2FkbWluLnV0aWxzIGltcG9ydCBQZ0FkbWluTW9kdWxlCitmcm9tIC5y ZWdpc3RyeSBpbXBvcnQgQXV0aFNvdXJjZVJlZ2lzdHJ5CisKK01PRFVMRV9OQU1FID0gJ2F1dGhl bnRpY2F0ZScKKworCitjbGFzcyBBdXRoZW50aWNhdGVNb2R1bGUoUGdBZG1pbk1vZHVsZSk6Cisg ICAgZGVmIGdldF9leHBvc2VkX3VybF9lbmRwb2ludHMoc2VsZik6CisgICAgICAgIHJldHVybiBb J2F1dGhlbnRpY2F0ZS5sb2dpbiddCisKKworYmx1ZXByaW50ID0gQXV0aGVudGljYXRlTW9kdWxl KE1PRFVMRV9OQU1FLCBfX25hbWVfXywgc3RhdGljX3VybF9wYXRoPScnKQorCisKK0BibHVlcHJp bnQucm91dGUoJy9sb2dpbicsIGVuZHBvaW50PSdsb2dpbicsIG1ldGhvZHM9WydHRVQnLCAnUE9T VCddKQorZGVmIGxvZ2luKCk6CisgICAgIiIiCisgICAgRW50cnkgcG9pbnQgZm9yIGFsbCB0aGUg YXV0aGVudGljYXRpb24gc291cmNlcy4KKyAgICBUaGUgdXNlciBpbnB1dCB3aWxsIGJlIHZhbGlk YXRlZCBhbmQgYXV0aGVudGljYXRlZC4KKyAgICAiIiIKKyAgICBmb3JtID0gX3NlY3VyaXR5Lmxv Z2luX2Zvcm0oKQorICAgIGF1dGhfb2JqID0gQXV0aFNvdXJjZU1hbmFnZXIoZm9ybSwgY29uZmln LkFVVEhFTlRJQ0FUSU9OX1NPVVJDRVMpCisgICAgc2Vzc2lvblsnX2F1dGhfc291cmNlX21hbmFn ZXJfb2JqJ10gPSBOb25lCisKKyAgICAjIFZhbGlkYXRlIHRoZSB1c2VyCisgICAgaWYgbm90IGF1 dGhfb2JqLnZhbGlkYXRlKCk6CisgICAgICAgIGZvciBmaWVsZCBpbiBmb3JtLmVycm9yczoKKyAg ICAgICAgICAgIGZvciBlcnJvciBpbiBmb3JtLmVycm9yc1tmaWVsZF06CisgICAgICAgICAgICAg ICAgZmxhc2goZXJyb3IsICd3YXJuaW5nJykKKyAgICAgICAgICAgIHJldHVybiBmbGFzay5yZWRp cmVjdChnZXRfcG9zdF9sb2dvdXRfcmVkaXJlY3QoKSkKKworICAgICMgQXV0aGVudGljYXRlIHRo ZSB1c2VyCisgICAgc3RhdHVzLCBtc2cgPSBhdXRoX29iai5hdXRoZW50aWNhdGUoKQorICAgIGlm IHN0YXR1czoKKyAgICAgICAgIyBMb2dpbiB0aGUgdXNlcgorICAgICAgICBzdGF0dXMsIG1zZyA9 IGF1dGhfb2JqLmxvZ2luKCkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIGZs YXNoKGdldHRleHQobXNnKSwgJ2RhbmdlcicpCisgICAgICAgICAgICByZXR1cm4gZmxhc2sucmVk aXJlY3QoZ2V0X3Bvc3RfbG9nb3V0X3JlZGlyZWN0KCkpCisKKyAgICAgICAgc2Vzc2lvblsnX2F1 dGhfc291cmNlX21hbmFnZXJfb2JqJ10gPSBhdXRoX29iai5hc19kaWN0KCkKKyAgICAgICAgcmV0 dXJuIGZsYXNrLnJlZGlyZWN0KCcvJykKKworICAgIGZsYXNoKGdldHRleHQobXNnKSwgJ2Rhbmdl cicpCisgICAgcmV0dXJuIGZsYXNrLnJlZGlyZWN0KGdldF9wb3N0X2xvZ291dF9yZWRpcmVjdCgp KQorCisKK2NsYXNzIEF1dGhTb3VyY2VNYW5hZ2VyKCk6CisgICAgIiIiVGhpcyBjbGFzcyB3aWxs IG1hbmFnZSBhbGwgdGhlIGF1dGhlbnRpY2F0aW9uIHNvdXJjZXMuCisgICAgICIiIgorICAgIGRl ZiBfX2luaXRfXyhzZWxmLCBmb3JtLCBzb3VyY2VzKToKKyAgICAgICAgc2VsZi5mb3JtID0gZm9y bQorICAgICAgICBzZWxmLmF1dGhfc291cmNlcyA9IHNvdXJjZXMKKyAgICAgICAgc2VsZi5zb3Vy Y2UgPSBOb25lCisgICAgICAgIHNlbGYuc291cmNlX2ZyaWVuZGx5X25hbWUgPSBOb25lCisKKyAg ICBkZWYgYXNfZGljdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgdGhlIGRp Y3Rpb25hcnkgb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIG9iamVjdC4KKyAgICAgICAgIiIiCisK KyAgICAgICAgcmVzID0gZGljdCgpCisgICAgICAgIHJlc1snc291cmNlX2ZyaWVuZGx5X25hbWUn XSA9IHNlbGYuc291cmNlX2ZyaWVuZGx5X25hbWUKKyAgICAgICAgcmVzWydhdXRoX3NvdXJjZXMn XSA9IHNlbGYuYXV0aF9zb3VyY2VzCisKKyAgICAgICAgcmV0dXJuIHJlcworCisgICAgZGVmIHNl dF9zb3VyY2Uoc2VsZiwgc291cmNlKToKKyAgICAgICAgc2VsZi5zb3VyY2UgPSBzb3VyY2UKKwor ICAgIEBwcm9wZXJ0eQorICAgIGRlZiBnZXRfc291cmNlKHNlbGYpOgorICAgICAgICByZXR1cm4g c2VsZi5zb3VyY2UKKworICAgIGRlZiBzZXRfc291cmNlX2ZyaWVuZGx5X25hbWUoc2VsZiwgbmFt ZSk6CisgICAgICAgIHNlbGYuc291cmNlX2ZyaWVuZGx5X25hbWUgPSBuYW1lCisKKyAgICBAcHJv cGVydHkKKyAgICBkZWYgZ2V0X3NvdXJjZV9mcmllbmRseV9uYW1lKHNlbGYpOgorICAgICAgICBy ZXR1cm4gc2VsZi5zb3VyY2VfZnJpZW5kbHlfbmFtZQorCisgICAgZGVmIHZhbGlkYXRlKHNlbGYp OgorICAgICAgICAiIiJWYWxpZGF0ZSB0aHJvdWdoIGFsbCB0aGUgc291cmNlcy4iIiIKKyAgICAg ICAgZm9yIHNyYyBpbiBzZWxmLmF1dGhfc291cmNlczoKKyAgICAgICAgICAgIHNvdXJjZSA9IGdl dF9hdXRoX3NvdXJjZXMoc3JjKQorICAgICAgICAgICAgaWYgc291cmNlLnZhbGlkYXRlKHNlbGYu Zm9ybSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNl CisKKyAgICBkZWYgYXV0aGVudGljYXRlKHNlbGYpOgorICAgICAgICAiIiJBdXRoZW50aWNhdGUg dGhyb3VnaCBhbGwgdGhlIHNvdXJjZXMuIiIiCisgICAgICAgIHN0YXR1cyA9IEZhbHNlCisgICAg ICAgIG1zZyA9IE5vbmUKKyAgICAgICAgZm9yIHNyYyBpbiBzZWxmLmF1dGhfc291cmNlczoKKyAg ICAgICAgICAgIHNvdXJjZSA9IGdldF9hdXRoX3NvdXJjZXMoc3JjKQorICAgICAgICAgICAgc3Rh dHVzLCBtc2cgPSBzb3VyY2UuYXV0aGVudGljYXRlKHNlbGYuZm9ybSkKKyAgICAgICAgICAgIGlm IHN0YXR1czoKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9zb3VyY2Uoc291cmNlKQorICAgICAg ICAgICAgICAgIHJldHVybiBzdGF0dXMsIG1zZworICAgICAgICByZXR1cm4gc3RhdHVzLCBtc2cK KworICAgIGRlZiBsb2dpbihzZWxmKToKKyAgICAgICAgc3RhdHVzLCBtc2cgPSBzZWxmLnNvdXJj ZS5sb2dpbihzZWxmLmZvcm0pCisgICAgICAgIGlmIHN0YXR1czoKKyAgICAgICAgICAgIHNlbGYu c2V0X3NvdXJjZV9mcmllbmRseV9uYW1lKHNlbGYuc291cmNlLmdldF9mcmllbmRseV9uYW1lKCkp CisgICAgICAgIHJldHVybiBzdGF0dXMsIG1zZworCisKK2RlZiBnZXRfYXV0aF9zb3VyY2VzKHR5 cGUpOgorICAgICIiIkdldCB0aGUgYXV0aGVudGljYXRlZCBzb3VyY2Ugb2JqZWN0IGZyb20gdGhl IHJlZ2lzdHJ5IiIiCisKKyAgICBhdXRoX3NvdXJjZXMgPSBnZXRhdHRyKGN1cnJlbnRfYXBwLCAn X3BnYWRtaW5fYXV0aF9zb3VyY2VzJywgTm9uZSkKKworICAgIGlmIGF1dGhfc291cmNlcyBpcyBO b25lIG9yIG5vdCBpc2luc3RhbmNlKGF1dGhfc291cmNlcywgZGljdCk6CisgICAgICAgIGF1dGhf c291cmNlcyA9IGRpY3QoKQorCisgICAgaWYgdHlwZSBpbiBhdXRoX3NvdXJjZXM6CisgICAgICAg IHJldHVybiBhdXRoX3NvdXJjZXNbdHlwZV0KKworICAgIGF1dGhfc291cmNlID0gQXV0aFNvdXJj ZVJlZ2lzdHJ5LmNyZWF0ZSh0eXBlKQorCisgICAgaWYgYXV0aF9zb3VyY2UgaXMgbm90IE5vbmU6 CisgICAgICAgIGF1dGhfc291cmNlc1t0eXBlXSA9IGF1dGhfc291cmNlCisgICAgICAgIHNldGF0 dHIoY3VycmVudF9hcHAsICdfcGdhZG1pbl9hdXRoX3NvdXJjZXMnLCBhdXRoX3NvdXJjZXMpCisK KyAgICByZXR1cm4gYXV0aF9zb3VyY2UKKworCitkZWYgaW5pdF9hcHAoYXBwKToKKyAgICBhdXRo X3NvdXJjZXMgPSBkaWN0KCkKKworICAgIHNldGF0dHIoYXBwLCAnX3BnYWRtaW5fYXV0aF9zb3Vy Y2VzJywgYXV0aF9zb3VyY2VzKQorICAgIEF1dGhTb3VyY2VSZWdpc3RyeS5sb2FkX2F1dGhfc291 cmNlcygpCisKKyAgICByZXR1cm4gYXV0aF9zb3VyY2VzCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1p bi9hdXRoZW50aWNhdGUvaW50ZXJuYWwucHkgYi93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvaW50 ZXJuYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi44MDQyMjM5ZDYK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvaW50ZXJuYWwucHkK QEAgLTAsMCArMSw5NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9z dGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDIwLCBUaGUgcGdBZG1p biBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhl IFBvc3RncmVTUUwgTGljZW5jZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIiIiSW1wbGVtZW50 cyBJbnRlcm5hbCBBdXRoZW50aWNhdGlvbiIiIgorCitpbXBvcnQgc2l4Citmcm9tIGZsYXNrIGlt cG9ydCBjdXJyZW50X2FwcAorZnJvbSBmbGFza19zZWN1cml0eSBpbXBvcnQgbG9naW5fdXNlcgor ZnJvbSBhYmMgaW1wb3J0IGFic3RyYWN0bWV0aG9kLCBhYnN0cmFjdHByb3BlcnR5Citmcm9tIGZs YXNrX2JhYmVsZXggaW1wb3J0IGdldHRleHQKKworZnJvbSAucmVnaXN0cnkgaW1wb3J0IEF1dGhT b3VyY2VSZWdpc3RyeQorZnJvbSBwZ2FkbWluLm1vZGVsIGltcG9ydCBVc2VyCisKKworQHNpeC5h ZGRfbWV0YWNsYXNzKEF1dGhTb3VyY2VSZWdpc3RyeSkKK2NsYXNzIEJhc2VBdXRoZW50aWNhdGlv bihvYmplY3QpOgorCisgICAgREVGQVVMVF9NU0cgPSB7CisgICAgICAgICdVU0VSX0RPRVNfTk9U X0VYSVNUJzogJ1NwZWNpZmllZCB1c2VyIGRvZXMgbm90IGV4aXN0JywKKyAgICAgICAgJ0xPR0lO X0ZBSUxFRCc6ICdMb2dpbiBmYWlsZWQnLAorICAgICAgICAnRU1BSUxfTk9UX1BST1ZJREVEJzog J0VtYWlsL1VzZXJuYW1lIG5vdCBwcm92aWRlZCcsCisgICAgICAgICdQQVNTV09SRF9OT1RfUFJP VklERUQnOiAnUGFzc3dvcmQgbm90IHByb3ZpZGVkJworICAgIH0KKworICAgIEBhYnN0cmFjdHBy b3BlcnR5CisgICAgZGVmIGdldF9mcmllbmRseV9uYW1lKGNscyk6CisgICAgICAgIHBhc3MKKwor ICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBhdXRoZW50aWNhdGUoY2xzKToKKyAgICAgICAg cGFzcworCisgICAgZGVmIHZhbGlkYXRlKHNlbGYsIGZvcm0pOgorICAgICAgICB1c2VybmFtZSA9 IGZvcm0uZGF0YVsnZW1haWwnXQorICAgICAgICBwYXNzd29yZCA9IGZvcm0uZGF0YVsncGFzc3dv cmQnXQorCisgICAgICAgIGlmIHVzZXJuYW1lIGlzIE5vbmUgb3IgdXNlcm5hbWUgPT0gJyc6Cisg ICAgICAgICAgICBmb3JtLmVtYWlsLmVycm9ycyA9IGxpc3QoZm9ybS5lbWFpbC5lcnJvcnMpCisg ICAgICAgICAgICBmb3JtLmVtYWlsLmVycm9ycy5hcHBlbmQoZ2V0dGV4dCgKKyAgICAgICAgICAg ICAgICBzZWxmLm1lc3NhZ2VzKCdFTUFJTF9OT1RfUFJPVklERUQnKSkpCisgICAgICAgICAgICBy ZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgcGFzc3dvcmQgaXMgTm9uZSBvciBwYXNzd29yZCA9PSAn JzoKKyAgICAgICAgICAgIGZvcm0ucGFzc3dvcmQuZXJyb3JzID0gbGlzdChmb3JtLnBhc3N3b3Jk LmVycm9ycykKKyAgICAgICAgICAgIGZvcm0ucGFzc3dvcmQuZXJyb3JzLmFwcGVuZCgKKyAgICAg ICAgICAgICAgICBzZWxmLm1lc3NhZ2VzKCdQQVNTV09SRF9OT1RfUFJPVklERUQnKSkKKyAgICAg ICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgbG9n aW4oc2VsZiwgZm9ybSk6CisgICAgICAgIHVzZXJuYW1lID0gZm9ybS5kYXRhWydlbWFpbCddCisg ICAgICAgIHVzZXIgPSBnZXRhdHRyKGZvcm0sICd1c2VyJywKKyAgICAgICAgICAgICAgICAgICAg ICAgVXNlci5xdWVyeS5maWx0ZXJfYnkodXNlcm5hbWU9dXNlcm5hbWUpLmZpcnN0KCkpCisKKyAg ICAgICAgaWYgdXNlciBpcyBOb25lOgorICAgICAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmV4 Y2VwdGlvbigKKyAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2VzKCdVU0VSX0RPRVNfTk9UX0VY SVNUJykpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UsIHNlbGYubWVzc2FnZXMoJ1VTRVJfRE9F U19OT1RfRVhJU1QnKQorCisgICAgICAgICMgTG9naW4gdXNlciB0aHJvdWdoIGZsYXNrX3NlY3Vy aXR5CisgICAgICAgIHN0YXR1cyA9IGxvZ2luX3VzZXIodXNlcikKKyAgICAgICAgaWYgbm90IHN0 YXR1czoKKyAgICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5leGNlcHRpb24oc2VsZi5tZXNz YWdlcygnTE9HSU5fRkFJTEVEJykpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UsIHNlbGYubWVz c2FnZXMoJ0xPR0lOX0ZBSUxFRCcpCisgICAgICAgIHJldHVybiBUcnVlLCBOb25lCisKKyAgICBk ZWYgbWVzc2FnZXMoc2VsZiwgbXNnX2tleSk6CisgICAgICAgIHJldHVybiBzZWxmLkRFRkFVTFRf TVNHW21zZ19rZXldIGlmIG1zZ19rZXkgaW4gc2VsZi5ERUZBVUxUX01TR1wKKyAgICAgICAgICAg IGVsc2UgTm9uZQorCisKK2NsYXNzIEludGVybmFsQXV0aGVudGljYXRpb24oQmFzZUF1dGhlbnRp Y2F0aW9uKToKKworICAgIGRlZiBnZXRfZnJpZW5kbHlfbmFtZShjbHMpOgorICAgICAgICByZXR1 cm4gZ2V0dGV4dCgiaW50ZXJuYWwiKQorCisgICAgZGVmIHZhbGlkYXRlKHNlbGYsIGZvcm0pOgor ICAgICAgICAiIiJVc2VyIHZhbGlkYXRpb24iIiIKKworICAgICAgICAjIEZsYXNrIHNlY3VyaXR5 IHZhbGlkYXRpb24KKyAgICAgICAgcmV0dXJuIGZvcm0udmFsaWRhdGVfb25fc3VibWl0KCkKKwor ICAgIGRlZiBhdXRoZW50aWNhdGUoc2VsZiwgZm9ybSk6CisgICAgICAgIHVzZXJuYW1lID0gZm9y bS5kYXRhWydlbWFpbCddCisgICAgICAgIHVzZXIgPSBnZXRhdHRyKGZvcm0sICd1c2VyJywKKyAg ICAgICAgICAgICAgICAgICAgICAgVXNlci5xdWVyeS5maWx0ZXJfYnkodXNlcm5hbWU9dXNlcm5h bWUpLmZpcnN0KCkpCisgICAgICAgIGlmIHVzZXIgYW5kIHVzZXIuaXNfYXV0aGVudGljYXRlZCBh bmQgZm9ybS52YWxpZGF0ZV9vbl9zdWJtaXQoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlLCBO b25lCisgICAgICAgIHJldHVybiBGYWxzZSwgc2VsZi5tZXNzYWdlcygnVVNFUl9ET0VTX05PVF9F WElTVCcpCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvbGRhcC5weSBiL3dl Yi9wZ2FkbWluL2F1dGhlbnRpY2F0ZS9sZGFwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMC4uYmUyNGVjMTkzCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vYXV0 aGVudGljYXRlL2xkYXAucHkKQEAgLTAsMCArMSwxODAgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj CisjIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEz IC0gMjAyMCwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlz IHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCisKKyIiIkEgYmx1ZXByaW50IG1vZHVsZSBpbXBsZW1lbnRpbmcgdGhlIGxkYXAgYXV0aGVu dGljYXRpb24uIiIiCisKK2ltcG9ydCBzc2wKK2ltcG9ydCBjb25maWcKK2Zyb20gbGRhcDMgaW1w b3J0IENvbm5lY3Rpb24sIFNlcnZlciwgVGxzLCBBTEwsIEFMTF9BVFRSSUJVVEVTCitmcm9tIGxk YXAzLmNvcmUuZXhjZXB0aW9ucyBpbXBvcnQgTERBUFNvY2tldE9wZW5FcnJvciwgTERBUEJpbmRF cnJvcixcCisgICAgTERBUEludmFsaWRTY29wZUVycm9yLCBMREFQQXR0cmlidXRlRXJyb3IsIExE QVBJbnZhbGlkRmlsdGVyRXJyb3IsXAorICAgIExEQVBTdGFydFRMU0Vycm9yCitmcm9tIGZsYXNr X2JhYmVsZXggaW1wb3J0IGdldHRleHQKKworZnJvbSAuaW50ZXJuYWwgaW1wb3J0IEJhc2VBdXRo ZW50aWNhdGlvbgorZnJvbSBwZ2FkbWluLm1vZGVsIGltcG9ydCBVc2VyLCBTZXJ2ZXJHcm91cCwg ZGIsIFJvbGUKK2Zyb20gZmxhc2tfc2VjdXJpdHkgaW1wb3J0IGxvZ2luX3VzZXIKK2Zyb20gZmxh c2sgaW1wb3J0IGN1cnJlbnRfYXBwCitmcm9tIHBnYWRtaW4udG9vbHMudXNlcl9tYW5hZ2VtZW50 IGltcG9ydCBjcmVhdGVfdXNlcgorCit0cnk6CisgICAgZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0 IHVybHBhcnNlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSB1cmxwYXJzZSBpbXBvcnQg dXJscGFyc2UKKworCitjbGFzcyBMREFQQXV0aGVudGljYXRpb24oQmFzZUF1dGhlbnRpY2F0aW9u KToKKyAgICAiIiJMZGFwIEF1dGhlbnRpY2F0aW9uIENsYXNzIiIiCisKKyAgICBkZWYgZ2V0X2Zy aWVuZGx5X25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBnZXR0ZXh0KCJsZGFwIikKKworICAg IGRlZiBhdXRoZW50aWNhdGUoc2VsZiwgZm9ybSk6CisgICAgICAgIHNlbGYudXNlcm5hbWUgPSBm b3JtLmRhdGFbJ2VtYWlsJ10KKyAgICAgICAgc2VsZi5wYXNzd29yZCA9IGZvcm0uZGF0YVsncGFz c3dvcmQnXQorCisgICAgICAgIHN0YXR1cywgbXNnID0gc2VsZi5jb25uZWN0KCkKKworICAgICAg ICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIHN0YXR1cywgbXNnCisKKyAgICAg ICAgc3RhdHVzLCB1c2VyX2VtYWlsID0gc2VsZi5zZWFyY2hfbGRhcF91c2VyKCkKKworICAgICAg ICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIHN0YXR1cywgdXNlcl9lbWFpbAor CisgICAgICAgIHJldHVybiBzZWxmLl9fYXV0b19jcmVhdGVfdXNlcih1c2VyX2VtYWlsKQorCisg ICAgZGVmIGNvbm5lY3Qoc2VsZik6CisgICAgICAgICIiIlNldHVwIHRoZSBjb25uZWN0aW9uIHRv IHRoZSBMREFQIHNlcnZlciBhbmQgYXV0aGVudGljYXRlIHRoZSB1c2VyLgorICAgICAgICAiIiIK KworICAgICAgICAjIFBhcnNlIHRoZSBzZXJ2ZXIgVVJJCisgICAgICAgIHVyaSA9IGdldGF0dHIo Y29uZmlnLCAnTERBUF9TRVJWRVJfVVJJJywgTm9uZSkKKworICAgICAgICBpZiB1cmk6CisgICAg ICAgICAgICB1cmkgPSB1cmxwYXJzZSh1cmkpCisKKyAgICAgICAgIyBDcmVhdGUgdGhlIFRMUyBj b25maWd1cmF0aW9uIG9iamVjdCBpZiByZXF1aXJlZAorICAgICAgICB0bHMgPSBOb25lCisgICAg ICAgIGlmIHVyaS5zY2hlbWUgPT0gJ2xkYXBzJyBvciBjb25maWcuTERBUF9VU0VfU1RBUlRUTFM6 CisKKyAgICAgICAgICAgIGNhX2NlcnRfZmlsZSA9IGdldGF0dHIoY29uZmlnLCAnTERBUF9DQV9D RVJUX0ZJTEUnLCBOb25lKQorICAgICAgICAgICAgY2VydF9maWxlID0gZ2V0YXR0cihjb25maWcs ICdMREFQX0NFUlRfRklMRScsIE5vbmUpCisgICAgICAgICAgICBrZXlfZmlsZSA9IGdldGF0dHIo Y29uZmlnLCAnTERBUF9LRVlfRklMRScsIE5vbmUpCisgICAgICAgICAgICBjZXJ0X3ZhbGlkYXRl ID0gc3NsLkNFUlRfTk9ORQorCisgICAgICAgICAgICBpZiBjYV9jZXJ0X2ZpbGUgYW5kIGNlcnRf ZmlsZSBhbmQga2V5X2ZpbGU6CisgICAgICAgICAgICAgICAgY2VydF92YWxpZGF0ZSA9IHNzbC5D RVJUX1JFUVVJUkVECisKKyAgICAgICAgICAgIHRscyA9IFRscygKKyAgICAgICAgICAgICAgICBs b2NhbF9wcml2YXRlX2tleV9maWxlPWtleV9maWxlLAorICAgICAgICAgICAgICAgIGxvY2FsX2Nl cnRpZmljYXRlX2ZpbGU9Y2VydF9maWxlLAorICAgICAgICAgICAgICAgIHZhbGlkYXRlPWNlcnRf dmFsaWRhdGUsCisgICAgICAgICAgICAgICAgdmVyc2lvbj1zc2wuUFJPVE9DT0xfVExTdjEsCisg ICAgICAgICAgICAgICAgY2FfY2VydHNfZmlsZT1jYV9jZXJ0X2ZpbGUpCisKKyAgICAgICAgIyBD cmVhdGUgdGhlIHNlcnZlciBvYmplY3QKKyAgICAgICAgc2VydmVyID0gU2VydmVyKHVyaS5ob3N0 bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ9dXJpLnBvcnQsCisgICAgICAgICAg ICAgICAgICAgICAgICB1c2Vfc3NsPSh1cmkuc2NoZW1lID09ICdsZGFwcycpLAorICAgICAgICAg ICAgICAgICAgICAgICAgZ2V0X2luZm89QUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgdGxz PXRscywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RfdGltZW91dD1jb25maWcuTERB UF9DT05ORUNUSU9OX1RJTUVPVVQpCisKKyAgICAgICAgIyBDcmVhdGUgdGhlIGNvbm5lY3Rpb24K KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdXNlcl9kbiA9ICJ7MH09ezF9LHsyfSIuZm9ybWF0 KGNvbmZpZy5MREFQX1VTRVJOQU1FX0FUVFJJQlVURSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzZWxmLnVzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5MREFQX0JBU0VfRE4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLmNvbm4gPSBD b25uZWN0aW9uKHNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNl cj11c2VyX2RuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZD1z ZWxmLnBhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvX2Jp bmQ9VHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAg ZXhjZXB0IExEQVBTb2NrZXRPcGVuRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGN1cnJlbnRfYXBw LmxvZ2dlci5leGNlcHRpb24oCisgICAgICAgICAgICAgICAgIkVycm9yIGNvbm5lY3RpbmcgdG8g dGhlIExEQVAgc2VydmVyOiAlc1xuIiAlIGUpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICJF cnJvciBjb25uZWN0aW5nIHRvIHRoZSBMREFQIHNlcnZlcjoiIFwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIiAlc1xuIiAlIGUuYXJnc1swXQorICAgICAgICBleGNlcHQgTERBUEJpbmRFcnJv ciBhcyBlOgorICAgICAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmV4Y2VwdGlvbigKKyAgICAg ICAgICAgICAgICAiRXJyb3IgYmluZGluZyB0byB0aGUgTERBUCBzZXJ2ZXI6ICVzXG4iICUgZSkK KyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgIkVycm9yIGJpbmRpbmcgdG8gdGhlIExEQVAgc2Vy dmVyOiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAiICVzXG4iICUgZS5hcmdzWzBdCisg ICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGN1cnJlbnRfYXBwLmxv Z2dlci5leGNlcHRpb24oCisgICAgICAgICAgICAgICAgIkVycm9yIGNvbm5lY3RpbmcgdG8gdGhl IExEQVAgc2VydmVyOiAlc1xuIiAlIGUpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICJFcnJv ciBjb25uZWN0aW5nIHRvIHRoZSBMREFQIHNlcnZlcjoiIFwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIiAlc1xuIiAlIGUuYXJnc1swXQorCisgICAgICAgICMgRW5hYmxlIFRMUyBpZiBTVEFS VFRMUyBpcyBjb25maWd1cmVkCisgICAgICAgIGlmIG5vdCB1cmkuc2NoZW1lID09ICdsZGFwcycg YW5kIGNvbmZpZy5MREFQX1VTRV9TVEFSVFRMUzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAg ICAgICAgICBzZWxmLmNvbm4uc3RhcnRfdGxzKCkKKyAgICAgICAgICAgIGV4Y2VwdCBMREFQU3Rh cnRUTFNFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5leGNl cHRpb24oCisgICAgICAgICAgICAgICAgICAgICJFcnJvciBzdGFydGluZyBUTFM6ICVzXG4iICUg ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UsICJFcnJvciBzdGFydGluZyBUTFM6ICVz XG4iICUgZS5hcmdzWzBdCisKKyAgICAgICAgcmV0dXJuIFRydWUsIE5vbmUKKworICAgIGRlZiBf X2F1dG9fY3JlYXRlX3VzZXIoc2VsZiwgdXNlcl9lbWFpbCk6CisgICAgICAgICIiIkFkZCB0aGUg bGRhcCB1c2VyIHRvIHRoZSBpbnRlcm5hbCBTUUxpdGUgZGF0YWJhc2UuIiIiCisgICAgICAgIGlm IGNvbmZpZy5MREFQX0FVVE9fQ1JFQVRFX1VTRVI6CisgICAgICAgICAgICB1c2VyID0gVXNlci5x dWVyeS5maWx0ZXJfYnkoCisgICAgICAgICAgICAgICAgdXNlcm5hbWU9c2VsZi51c2VybmFtZSku Zmlyc3QoKQorICAgICAgICAgICAgaWYgdXNlciBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJl dHVybiBjcmVhdGVfdXNlcih7CisgICAgICAgICAgICAgICAgICAgICd1c2VybmFtZSc6IHNlbGYu dXNlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICdlbWFpbCc6IHVzZXJfZW1haWwsCisgICAg ICAgICAgICAgICAgICAgICdyb2xlJzogMiwKKyAgICAgICAgICAgICAgICAgICAgJ2FjdGl2ZSc6 IFRydWUsCisgICAgICAgICAgICAgICAgICAgICdzb3VyY2UnOiAnbGRhcCcKKyAgICAgICAgICAg ICAgICB9KQorCisgICAgICAgIHJldHVybiBUcnVlLCBOb25lCisKKyAgICBkZWYgc2VhcmNoX2xk YXBfdXNlcihzZWxmKToKKyAgICAgICAgIiIiR2V0IGEgbGlzdCBvZiB1c2VycyBmcm9tIHRoZSBM REFQIHNlcnZlciBiYXNlZCBvbiBjb25maWcKKyAgICAgICAgIHNlYXJjaCBjcml0ZXJpYS4iIiIK KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jb25uLnNlYXJjaChzZWFyY2hfYmFzZT1j b25maWcuTERBUF9TRUFSQ0hfQkFTRV9ETiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2VhcmNoX2ZpbHRlcj1jb25maWcuTERBUF9TRUFSQ0hfRklMVEVSLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZWFyY2hfc2NvcGU9Y29uZmlnLkxEQVBfU0VBUkNIX1NDT1BFLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzPUFMTF9BVFRSSUJVVEVTCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBleGNlcHQgTERBUEludmFsaWRT Y29wZUVycm9yIGFzIGU6CisgICAgICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIuZXhjZXB0aW9u KAorICAgICAgICAgICAgICAgICJFcnJvciBzZWFyY2hpbmcgdGhlIExEQVAgZGlyZWN0b3J5OiAl c1xuIiAlIGUpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICJFcnJvciBzZWFyY2hpbmcgdGhl IExEQVAgZGlyZWN0b3J5OiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAiICVzXG4iICUg ZS5hcmdzWzBdCisgICAgICAgIGV4Y2VwdCBMREFQQXR0cmlidXRlRXJyb3IgYXMgZToKKyAgICAg ICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5leGNlcHRpb24oIkVycm9yIHNlYXJjaGluZyB0aGUg TERBUCBkaXJlY3Rvcnk6IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiICVzXG4iICUgZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgIkVycm9yIHNlYXJjaGlu ZyB0aGUgTERBUCBkaXJlY3Rvcnk6IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgJXNc biIgJSBlLmFyZ3NbMF0KKyAgICAgICAgZXhjZXB0IExEQVBJbnZhbGlkRmlsdGVyRXJyb3IgYXMg ZToKKyAgICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5leGNlcHRpb24oCisgICAgICAgICAg ICAgICAgIkVycm9yIHNlYXJjaGluZyB0aGUgTERBUCBkaXJlY3Rvcnk6ICVzXG4iICUgZSkKKyAg ICAgICAgICAgIHJldHVybiBGYWxzZSwgIkVycm9yIHNlYXJjaGluZyB0aGUgTERBUCBkaXJlY3Rv cnk6IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgJXNcbiIgJSBlLmFyZ3NbMF0KKwor ICAgICAgICB1c2VycyA9IFtdCisgICAgICAgIGZvciBlbnRyeSBpbiBzZWxmLmNvbm4uZW50cmll czoKKyAgICAgICAgICAgIHVzZXJfZW1haWwgPSBOb25lCisgICAgICAgICAgICBpZiBjb25maWcu TERBUF9VU0VSTkFNRV9BVFRSSUJVVEUgaW4gZW50cnkgYW5kIHNlbGYudXNlcm5hbWUgPT0gXAor ICAgICAgICAgICAgICAgICAgICBlbnRyeVtjb25maWcuTERBUF9VU0VSTkFNRV9BVFRSSUJVVEVd LnZhbHVlOgorICAgICAgICAgICAgICAgIGlmICdtYWlsJyBpbiBlbnRyeToKKyAgICAgICAgICAg ICAgICAgICAgdXNlcl9lbWFpbCA9IGVudHJ5WydtYWlsJ10udmFsdWUKKyAgICAgICAgICAgICAg ICByZXR1cm4gVHJ1ZSwgdXNlcl9lbWFpbAorICAgICAgICByZXR1cm4gRmFsc2UsIE5vbmUKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2F1dGhlbnRpY2F0ZS9yZWdpc3RyeS5weSBiL3dlYi9wZ2Fk bWluL2F1dGhlbnRpY2F0ZS9yZWdpc3RyeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAuLjkwNWY1NTY0MwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2F1dGhl bnRpY2F0ZS9yZWdpc3RyeS5weQpAQCAtMCwwICsxLDY1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor IworIyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAx MyAtIDIwMjAsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBp cyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIworCisiIiJFeHRlcm5hbCBBdXRoZW50aWNhdGlvbiBSZWdpc3RyeS4iIiIKKworCitmcm9t IGZsYXNrX2JhYmVsZXggaW1wb3J0IGdldHRleHQKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhCisK KworZGVmIF9kZWNvcmF0ZV9jbHNfbmFtZShtb2R1bGVfbmFtZSk6CisgICAgbGVuZ3RoID0gbGVu KF9fcGFja2FnZV9fKSArIDEKKworICAgIGlmIGxlbihtb2R1bGVfbmFtZSkgPiBsZW5ndGggYW5k IG1vZHVsZV9uYW1lLnN0YXJ0c3dpdGgoX19wYWNrYWdlX18pOgorICAgICAgICByZXR1cm4gbW9k dWxlX25hbWVbbGVuZ3RoOl0KKworICAgIHJldHVybiBtb2R1bGVfbmFtZQorCisKK2NsYXNzIEF1 dGhTb3VyY2VSZWdpc3RyeShBQkNNZXRhKToKKyAgICByZWdpc3RyeSA9IE5vbmUKKyAgICBhdXRo X3NvdXJjZXMgPSBkaWN0KCkKKworICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBk KToKKworICAgICAgICAjIFJlZ2lzdGVyIHRoaXMgdHlwZSBvZiBhdXRoX3NvdXJjZXMsIGJhc2Vk IG9uIHRoZSBtb2R1bGUgbmFtZQorICAgICAgICAjIEF2b2lkIHJlZ2lzdGVyaW5nIHRoZSBCYXNl QXV0aGVudGljYXRpb24gaXRzZWxmCisKKyAgICAgICAgQXV0aFNvdXJjZVJlZ2lzdHJ5LnJlZ2lz dHJ5W19kZWNvcmF0ZV9jbHNfbmFtZShkWydfX21vZHVsZV9fJ10pXSA9IGNscworICAgICAgICBB QkNNZXRhLl9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGQpCisKKyAgICBAY2xhc3NtZXRob2QK KyAgICBkZWYgY3JlYXRlKGNscywgbmFtZSwgKiprd2FyZ3MpOgorCisgICAgICAgIGlmIG5hbWUg aW4gQXV0aFNvdXJjZVJlZ2lzdHJ5LmF1dGhfc291cmNlczoKKyAgICAgICAgICAgIHJldHVybiBB dXRoU291cmNlUmVnaXN0cnkuYXV0aF9zb3VyY2VzW25hbWVdCisKKyAgICAgICAgaWYgbmFtZSBp biBBdXRoU291cmNlUmVnaXN0cnkucmVnaXN0cnk6CisgICAgICAgICAgICBBdXRoU291cmNlUmVn aXN0cnkuYXV0aF9zb3VyY2VzW25hbWVdID0gXAorICAgICAgICAgICAgICAgIChBdXRoU291cmNl UmVnaXN0cnkucmVnaXN0cnlbbmFtZV0pKCoqa3dhcmdzKQorICAgICAgICAgICAgcmV0dXJuIEF1 dGhTb3VyY2VSZWdpc3RyeS5hdXRoX3NvdXJjZXNbbmFtZV0KKworICAgICAgICByYWlzZSBOb3RJ bXBsZW1lbnRlZEVycm9yKAorICAgICAgICAgICAgZ2V0dGV4dCgKKyAgICAgICAgICAgICAgICAi QXV0aGVudGljYXRpb24gc291cmNlICd7MH0nIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZC4iCisg ICAgICAgICAgICApLmZvcm1hdChuYW1lKQorICAgICAgICApCisKKyAgICBAY2xhc3NtZXRob2QK KyAgICBkZWYgbG9hZF9hdXRoX3NvdXJjZXMoY2xzKToKKyAgICAgICAgIyBJbml0aWFsaXplIHRo ZSByZWdpc3RyeSBvbmx5IGlmIGl0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQKKyAgICAg ICAgaWYgQXV0aFNvdXJjZVJlZ2lzdHJ5LnJlZ2lzdHJ5IGlzIE5vbmU6CisgICAgICAgICAgICBB dXRoU291cmNlUmVnaXN0cnkucmVnaXN0cnkgPSBkaWN0KCkKKworICAgICAgICBmcm9tIGltcG9y dGxpYiBpbXBvcnQgaW1wb3J0X21vZHVsZQorICAgICAgICBmcm9tIHdlcmt6ZXVnLnV0aWxzIGlt cG9ydCBmaW5kX21vZHVsZXMKKworICAgICAgICBmb3IgbW9kdWxlX25hbWUgaW4gZmluZF9tb2R1 bGVzKF9fcGFja2FnZV9fLCBUcnVlKToKKyAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF9tb2R1 bGUobW9kdWxlX25hbWUpCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvdGVz dHMvX19pbml0X18ucHkgYi93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvdGVzdHMvX19pbml0X18u cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi43YWY0NWIxYjUKLS0tIC9k ZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvdGVzdHMvX19pbml0X18ucHkK QEAgLTAsMCArMSw4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQgLSBQb3N0 Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMjAsIFRoZSBwZ0FkbWlu IERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUg UG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vYXV0aGVudGljYXRlL3Rlc3RzL3Rlc3RfbGRhcC5weSBiL3dlYi9wZ2FkbWluL2F1 dGhlbnRpY2F0ZS90ZXN0cy90ZXN0X2xkYXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwLi4wMDBmMmQwYjYKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9hdXRo ZW50aWNhdGUvdGVzdHMvdGVzdF9sZGFwLnB5CkBAIC0wLDAgKzEsNjggQEAKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0 IChDKSAyMDEzIC0gMjAyMCwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNv ZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCisKK2Zyb20gcGdhZG1pbi51dGlscy5yb3V0ZSBpbXBvcnQgQmFzZVRlc3RH ZW5lcmF0b3IKK2Zyb20gcGdhZG1pbi51dGlscyBpbXBvcnQgc2VydmVyX3V0aWxzIGFzIHNlcnZl cl91dGlscworZnJvbSByZWdyZXNzaW9uIGltcG9ydCBwYXJlbnRfbm9kZV9kaWN0CitpbXBvcnQg c2ltcGxlanNvbiBhcyBqc29uCisKKworY2xhc3MgRGFzaGJvYXJkR3JhcGhzVGVzdENhc2UoQmFz ZVRlc3RHZW5lcmF0b3IpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgdmFsaWRhdGVzIHRoZSB2 ZXJzaW9uIGluIHJhbmdlIGZ1bmN0aW9uYWxpdHkKKyAgICBieSBkZWZpbmluZyBkaWZmZXJlbnQg dmVyc2lvbiBzY2VuYXJpb3M7IHdoZXJlIGRpY3Qgb2YKKyAgICBwYXJhbWV0ZXJzIGRlc2NyaWJl cyB0aGUgc2NlbmFyaW8gYXBwZW5kZWQgYnkgdGVzdCBuYW1lLgorICAgICIiIgorCisgICAgc2Nl bmFyaW9zID0gWygKKyAgICAgICAgJ1Rlc3RDYXNlIGZvciBzZXNzaW9uX3N0YXRzIGdyYXBoJywg ZGljdCgKKyAgICAgICAgICAgIGRpZD0tMSwKKyAgICAgICAgICAgIGNoYXJ0X2RhdGE9eworICAg ICAgICAgICAgICAgICdzZXNzaW9uX3N0YXRzJzogWydUb3RhbCcsICdBY3RpdmUnLCAnSWRsZSdd LAorICAgICAgICAgICAgfQorICAgICAgICApKQorICAgIF0KKworICAgIGRlZiBzZXRVcChzZWxm KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGdldFN0YXRzVXJsKHNlbGYsIHNpZD0tMSwgZGlk PS0xLCBjaGFydF9uYW1lcz0nJyk6CisgICAgICAgIGJhc2VfdXJsID0gJy9kYXNoYm9hcmQvZGFz aGJvYXJkX3N0YXRzJworICAgICAgICBiYXNlX3VybCA9IGJhc2VfdXJsICsgJy8nICsgc3RyKHNp ZCkKKyAgICAgICAgYmFzZV91cmwgKz0gJy8nICsgc3RyKGRpZCkgaWYgZGlkID4gMCBlbHNlICcn CisgICAgICAgIGJhc2VfdXJsICs9ICc/Y2hhcnRfbmFtZXM9JyArIGNoYXJ0X25hbWVzCisgICAg ICAgIHJldHVybiBiYXNlX3VybAorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgIHNl bGYuc2VydmVyX2lkID0gcGFyZW50X25vZGVfZGljdFsic2VydmVyIl1bLTFdWyJzZXJ2ZXJfaWQi XQorICAgICAgICBzZXJ2ZXJfcmVzcG9uc2UgPSBzZXJ2ZXJfdXRpbHMuY29ubmVjdF9zZXJ2ZXIo c2VsZiwgc2VsZi5zZXJ2ZXJfaWQpCisgICAgICAgIGlmIHNlcnZlcl9yZXNwb25zZVsiaW5mbyJd ID09ICJTZXJ2ZXIgY29ubmVjdGVkLiI6CisKKyAgICAgICAgICAgIHVybCA9IHNlbGYuZ2V0U3Rh dHNVcmwoc2VsZi5zZXJ2ZXJfaWQsIHNlbGYuZGlkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiLCIuam9pbihzZWxmLmNoYXJ0X2RhdGEua2V5cygpKSkKKyAgICAgICAgICAg IHJlc3BvbnNlID0gc2VsZi50ZXN0ZXIuZ2V0KHVybCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0 RXF1YWxzKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCisKKyAgICAgICAgICAgIHJlc3BfZGF0 YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuZGF0YSkKKworICAgICAgICAgICAgIyBBbGwgcmVxdWVz dGVkIGNoYXJ0cyByZWNlaXZlZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHJl c3BfZGF0YS5rZXlzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYu Y2hhcnRfZGF0YS5rZXlzKCkpKQorCisgICAgICAgICAgICAjIEFsbCByZXF1ZXN0ZWQgY2hhcnRz IGRhdGEgcmVjZWl2ZWQKKyAgICAgICAgICAgIGZvciBjaGFydF9uYW1lLCBjaGFydF92YWxzIGlu IHNlbGYuY2hhcnRfZGF0YS5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1 YWxzKHNldChyZXNwX2RhdGFbY2hhcnRfbmFtZV0ua2V5cygpKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZXQoY2hhcnRfdmFscykpCisKKyAgICAgICAgZWxzZToKKyAgICAg ICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyb3Igd2hpbGUgY29ubmVjdGluZyBzZXJ2ZXIgdG8g YWRkIHRoZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGRhdGFiYXNlLiIpCisKKyAg ICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvX19pbml0X18ucHkgYi93ZWIvcGdhZG1pbi9icm93c2VyL19faW5pdF9fLnB5 CmluZGV4IDMwYWYzZTExYi4uMDliZGJjMDE1IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93 c2VyL19faW5pdF9fLnB5CisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvX19pbml0X18ucHkKQEAg LTQ1LDYgKzQ1LDcgQEAgZnJvbSBwZ2FkbWluLmJyb3dzZXIucmVnaXN0ZXJfYnJvd3Nlcl9wcmVm ZXJlbmNlcyBpbXBvcnQgXAogZnJvbSBwZ2FkbWluLnV0aWxzLm1hc3Rlcl9wYXNzd29yZCBpbXBv cnQgdmFsaWRhdGVfbWFzdGVyX3Bhc3N3b3JkLCBcCiAgICAgc2V0X21hc3RlcnBhc3NfY2hlY2tf dGV4dCwgY2xlYW51cF9tYXN0ZXJfcGFzc3dvcmQsIGdldF9jcnlwdF9rZXksIFwKICAgICBzZXRf Y3J5cHRfa2V5LCBwcm9jZXNzX21hc3RlcnBhc3NfZGlzYWJsZWQKK2Zyb20gcGdhZG1pbi5tb2Rl bCBpbXBvcnQgVXNlcgogCiB0cnk6CiAgICAgaW1wb3J0IHVybGxpYi5yZXF1ZXN0IGFzIHVybHJl cQpAQCAtNTgwLDEyICs1ODEsMjAgQEAgZGVmIGluZGV4KCk6CiAKICAgICAgICAgICAgICAgICBm bGFzaChtc2csICd3YXJuaW5nJykKIAorICAgIGF1dGhfb25seV9pbnRlcm5hbCA9IEZhbHNlCisg ICAgaWYgbGVuKGNvbmZpZy5BVVRIRU5USUNBVElPTl9TT1VSQ0VTKSA9PSAxXAorICAgICAgICAg ICAgYW5kICdpbnRlcm5hbCcgaW4gY29uZmlnLkFVVEhFTlRJQ0FUSU9OX1NPVVJDRVM6CisgICAg ICAgIGF1dGhfb25seV9pbnRlcm5hbCA9IFRydWUKKwogICAgIHJlc3BvbnNlID0gUmVzcG9uc2Uo cmVuZGVyX3RlbXBsYXRlKAogICAgICAgICBNT0RVTEVfTkFNRSArICIvaW5kZXguaHRtbCIsCi0g ICAgICAgIHVzZXJuYW1lPWN1cnJlbnRfdXNlci5lbWFpbCwKKyAgICAgICAgdXNlcm5hbWU9Y3Vy cmVudF91c2VyLnVzZXJuYW1lLAorICAgICAgICBhdXRoX3NvdXJjZT1zZXNzaW9uWworICAgICAg ICAgICAgJ19hdXRoX3NvdXJjZV9tYW5hZ2VyX29iaiddWydzb3VyY2VfZnJpZW5kbHlfbmFtZSdd LAogICAgICAgICBpc19hZG1pbj1jdXJyZW50X3VzZXIuaGFzX3JvbGUoIkFkbWluaXN0cmF0b3Ii KSwKICAgICAgICAgbG9nb3V0X3VybD1fZ2V0X2xvZ291dF91cmwoKSwKLSAgICAgICAgXz1nZXR0 ZXh0CisgICAgICAgIF89Z2V0dGV4dCwKKyAgICAgICAgYXV0aF9vbmx5X2ludGVybmFsPWF1dGhf b25seV9pbnRlcm5hbAogICAgICkpCiAKICAgICAjIFNldCB0aGUgbGFuZ3VhZ2UgY29va2llIGFm dGVyIGxvZ2luLCBzbyBuZXh0IHRpbWUgdGhlIHVzZXIgd2lsbCBoYXZlIHRoYXQKQEAgLTk5NCw0 MyArMTAwMyw2MCBAQCBpZiBoYXNhdHRyKGNvbmZpZywgJ1NFQ1VSSVRZX1JFQ09WRVJBQkxFJykg YW5kIGNvbmZpZy5TRUNVUklUWV9SRUNPVkVSQUJMRToKICAgICAgICAgICAgIGZvcm0gPSBmb3Jt X2NsYXNzKCkKIAogICAgICAgICBpZiBmb3JtLnZhbGlkYXRlX29uX3N1Ym1pdCgpOgotICAgICAg ICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbmRfcmVzZXRfcGFzc3dvcmRfaW5zdHJ1Y3Rp b25zKGZvcm0udXNlcikKLSAgICAgICAgICAgIGV4Y2VwdCBTT0NLRVRFcnJvckV4Y2VwdGlvbiBh cyBlOgotICAgICAgICAgICAgICAgICMgSGFuZGxlIHNvY2tldCBlcnJvcnMgd2hpY2ggYXJlIG5v dCBjb3ZlcmVkIGJ5IFNNVFBFeGNlcHRpb25zLgotICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXhj ZXB0aW9uKHN0cihlKSwgZXhjX2luZm89VHJ1ZSkKLSAgICAgICAgICAgICAgICBmbGFzaChnZXR0 ZXh0KHUnU01UUCBTb2NrZXQgZXJyb3I6IHt9XG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1J1lvdXIgcGFzc3dvcmQgaGFzIG5vdCBiZWVuIGNoYW5nZWQuJwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKS5mb3JtYXQoZSksCi0gICAgICAgICAgICAgICAgICAgICAgJ2Rh bmdlcicpCi0gICAgICAgICAgICAgICAgaGFzX2Vycm9yID0gVHJ1ZQotICAgICAgICAgICAgZXhj ZXB0IChTTVRQQ29ubmVjdEVycm9yLCBTTVRQUmVzcG9uc2VFeGNlcHRpb24sCi0gICAgICAgICAg ICAgICAgICAgIFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQsIFNNVFBEYXRhRXJyb3IsIFNNVFBIZWxv RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgIFNNVFBFeGNlcHRpb24sIFNNVFBBdXRoZW50aWNh dGlvbkVycm9yLCBTTVRQU2VuZGVyUmVmdXNlZCwKLSAgICAgICAgICAgICAgICAgICAgU01UUFJl Y2lwaWVudHNSZWZ1c2VkKSBhcyBlOgotCi0gICAgICAgICAgICAgICAgIyBIYW5kbGUgc210cCBz cGVjaWZpYyBleGNlcHRpb25zLgotICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKHN0 cihlKSwgZXhjX2luZm89VHJ1ZSkKLSAgICAgICAgICAgICAgICBmbGFzaChnZXR0ZXh0KHUnU01U UCBlcnJvcjoge31cbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnWW91ciBwYXNz d29yZCBoYXMgbm90IGJlZW4gY2hhbmdlZC4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApLmZvcm1hdChlKSwKLSAgICAgICAgICAgICAgICAgICAgICAnZGFuZ2VyJykKLSAgICAgICAg ICAgICAgICBoYXNfZXJyb3IgPSBUcnVlCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFz IGU6Ci0gICAgICAgICAgICAgICAgIyBIYW5kbGUgb3RoZXIgZXhjZXB0aW9ucy4KLSAgICAgICAg ICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbihzdHIoZSksIGV4Y19pbmZvPVRydWUpCi0gICAgICAg ICAgICAgICAgZmxhc2goZ2V0dGV4dCh1J0Vycm9yOiB7fVxuJwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdSdZb3VyIHBhc3N3b3JkIGhhcyBub3QgYmVlbiBjaGFuZ2VkLicKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICkuZm9ybWF0KGUpLAorICAgICAgICAgICAgIyBDaGVj ayB0aGUgQXV0aGVudGljYXRpb24gc291cmNlIG9mIHRoZSBVc2VyCisgICAgICAgICAgICB1c2Vy ID0gVXNlci5xdWVyeS5maWx0ZXJfYnkoCisgICAgICAgICAgICAgICAgZW1haWw9Zm9ybS5kYXRh WydlbWFpbCddLAorICAgICAgICAgICAgICAgIGF1dGhfc291cmNlPWN1cnJlbnRfYXBwLlBHQURN SU5fREVGQVVMVF9BVVRIX1NPVVJDRQorICAgICAgICAgICAgKS5maXJzdCgpCisKKyAgICAgICAg ICAgIGlmIHVzZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIElmIHRoZSB1c2VyIGlzIG5v dCBhbiBpbnRlcm5hbCB1c2VyLCByYWlzZSB0aGUgZXhjZXB0aW9uCisgICAgICAgICAgICAgICAg Zmxhc2goZ2V0dGV4dCgnWW91ciBhY2NvdW50IGlzIGF1dGhlbnRpY2F0ZWQgdXNpbmcgYW4gJwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dGVybmFsIHt9IHNvdXJjZS4gJworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJh dG9ycyBvZiB0aGlzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXJ2aWNlIGlm IHlvdSBuZWVkIHRvIHJlc2V0IHlvdXIgcGFzc3dvcmQuJworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKS5mb3JtYXQoZm9ybS51c2VyLmF1dGhfc291cmNlKSwKICAgICAgICAgICAgICAg ICAgICAgICAnZGFuZ2VyJykKICAgICAgICAgICAgICAgICBoYXNfZXJyb3IgPSBUcnVlCisgICAg ICAgICAgICBpZiBub3QgaGFzX2Vycm9yOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAg ICAgICAgICAgICAgc2VuZF9yZXNldF9wYXNzd29yZF9pbnN0cnVjdGlvbnMoZm9ybS51c2VyKQor ICAgICAgICAgICAgICAgIGV4Y2VwdCBTT0NLRVRFcnJvckV4Y2VwdGlvbiBhcyBlOgorICAgICAg ICAgICAgICAgICAgICAjIEhhbmRsZSBzb2NrZXQgZXJyb3JzIHdoaWNoIGFyZSBub3QKKyAgICAg ICAgICAgICAgICAgICAgIyBjb3ZlcmVkIGJ5IFNNVFBFeGNlcHRpb25zLgorICAgICAgICAgICAg ICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbihzdHIoZSksIGV4Y19pbmZvPVRydWUpCisgICAgICAg ICAgICAgICAgICAgIGZsYXNoKGdldHRleHQodSdTTVRQIFNvY2tldCBlcnJvcjoge31cbicKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J1lvdXIgcGFzc3dvcmQgaGFzIG5vdCBi ZWVuIGNoYW5nZWQuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuZm9ybWF0 KGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnZGFuZ2VyJykKKyAgICAgICAgICAgICAg ICAgICAgaGFzX2Vycm9yID0gVHJ1ZQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoU01UUENvbm5l Y3RFcnJvciwgU01UUFJlc3BvbnNlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg U01UUFNlcnZlckRpc2Nvbm5lY3RlZCwgU01UUERhdGFFcnJvciwgU01UUEhlbG9FcnJvciwKKyAg ICAgICAgICAgICAgICAgICAgICAgIFNNVFBFeGNlcHRpb24sIFNNVFBBdXRoZW50aWNhdGlvbkVy cm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgU01UUFNlbmRlclJlZnVzZWQsIFNNVFBSZWNp cGllbnRzUmVmdXNlZCkgYXMgZToKKworICAgICAgICAgICAgICAgICAgICAjIEhhbmRsZSBzbXRw IHNwZWNpZmljIGV4Y2VwdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXhjZXB0 aW9uKHN0cihlKSwgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZmxhc2goZ2V0 dGV4dCh1J1NNVFAgZXJyb3I6IHt9XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdSdZb3VyIHBhc3N3b3JkIGhhcyBub3QgYmVlbiBjaGFuZ2VkLicKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApLmZvcm1hdChlKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgJ2RhbmdlcicpCisgICAgICAgICAgICAgICAgICAgIGhhc19lcnJvciA9IFRydWUKKyAgICAg ICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICMg SGFuZGxlIG90aGVyIGV4Y2VwdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXhj ZXB0aW9uKHN0cihlKSwgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZmxhc2go Z2V0dGV4dCh1J0Vycm9yOiB7fVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHUnWW91ciBwYXNzd29yZCBoYXMgbm90IGJlZW4gY2hhbmdlZC4nCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKS5mb3JtYXQoZSksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICdkYW5nZXInKQorICAgICAgICAgICAgICAgICAgICBoYXNfZXJyb3IgPSBUcnVlCiAKICAgICAg ICAgICAgIGlmIHJlcXVlc3QuanNvbiBpcyBOb25lIGFuZCBub3QgaGFzX2Vycm9yOgogICAgICAg ICAgICAgICAgIGRvX2ZsYXNoKCpnZXRfbWVzc2FnZSgnUEFTU1dPUkRfUkVTRVRfUkVRVUVTVCcs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsPWZvcm0udXNlci5l bWFpbCkpCiAKICAgICAgICAgaWYgcmVxdWVzdC5qc29uIGFuZCBub3QgaGFzX2Vycm9yOgotICAg ICAgICAgICAgcmV0dXJuIF9yZW5kZXJfanNvbihmb3JtLCBpbmNsdWRlX3VzZXI9RmFsc2UpCisg ICAgICAgICAgICByZXR1cm4gZGVmYXVsdF9yZW5kZXJfanNvbihmb3JtLCBpbmNsdWRlX3VzZXI9 RmFsc2UpCiAKICAgICAgICAgcmV0dXJuIF9zZWN1cml0eS5yZW5kZXJfdGVtcGxhdGUoCiAgICAg ICAgICAgICBjb25maWdfdmFsdWUoJ0ZPUkdPVF9QQVNTV09SRF9URU1QTEFURScpLApkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZW1wbGF0ZXMvYnJvd3Nlci9pbmRleC5odG1sIGIv d2ViL3BnYWRtaW4vYnJvd3Nlci90ZW1wbGF0ZXMvYnJvd3Nlci9pbmRleC5odG1sCmluZGV4IDY4 MmMyM2Q2NS4uYjM4OWI5NTc0IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3RlbXBs YXRlcy9icm93c2VyL2luZGV4Lmh0bWwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZW1wbGF0 ZXMvYnJvd3Nlci9pbmRleC5odG1sCkBAIC0xNDIsNiArMTQyLDcgQEAgd2luZG93Lm9ubG9hZCA9 IGZ1bmN0aW9uKGUpewogICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJuYXYtbGlu ayBkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biIKICAgICAgICAgICAgICAg ICAgICByb2xlPSJidXR0b24iIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIiBpZD0ibmF2YmFyLXVzZXIi PjwvYT4KICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUgZHJvcGRvd24t bWVudS1yaWdodCIgcm9sZT0ibWVudSI+CisgICAgICAgICAgICAgICAgICAgIHslIGlmIGF1dGhf b25seV9pbnRlcm5hbCAlfQogICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAg ICAgICAgICAgICA8YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iIyIgb25jbGljaz0icGdB ZG1pbi5Ccm93c2VyLlVzZXJNYW5hZ2VtZW50LmNoYW5nZV9wYXNzd29yZCgKICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ3t7IHVybF9mb3IoJ2Jyb3dzZXIuY2hhbmdlX3Bhc3N3b3JkJykgfX0n CkBAIC0xNTAsNiArMTUxLDcgQEAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKGUpewogICAgICAg ICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAg ICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duLWRpdmlkZXIiPjwvbGk+CisgICAgICAg ICAgICAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgICAgICAgICAgICAgIHslIGlmIGlzX2Fk bWluICV9CiAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIg aHJlZj0iIyIgb25jbGljaz0icGdBZG1pbi5Ccm93c2VyLlVzZXJNYW5hZ2VtZW50LnNob3dfdXNl cnMoKSI+e3sgXygnVXNlcnMnKSB9fTwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICA8bGkg Y2xhc3M9ImRyb3Bkb3duLWRpdmlkZXIiPjwvbGk+CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9i cm93c2VyL3RlbXBsYXRlcy9icm93c2VyL21hY3Jvcy9ncmF2YXRhcl9pY29uLm1hY3JvIGIvd2Vi L3BnYWRtaW4vYnJvd3Nlci90ZW1wbGF0ZXMvYnJvd3Nlci9tYWNyb3MvZ3JhdmF0YXJfaWNvbi5t YWNybwppbmRleCA3MmVjOTdlNTkuLmVkZWQ4YjY4YSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4v YnJvd3Nlci90ZW1wbGF0ZXMvYnJvd3Nlci9tYWNyb3MvZ3JhdmF0YXJfaWNvbi5tYWNybworKysg Yi93ZWIvcGdhZG1pbi9icm93c2VyL3RlbXBsYXRlcy9icm93c2VyL21hY3Jvcy9ncmF2YXRhcl9p Y29uLm1hY3JvCkBAIC00LDUgKzQsNSBAQCB3ZSB3aWxsIG5vdCBhc3NvY2lhdGUgb3VyIGFwcGxp Y2F0aW9uIHdpdGggR3JhdmF0YXIgbW9kdWxlIHdoaWNoIHdpbGwgbWFrZQogJ2dyYXZhdGFyJyBm aWx0ZXIgdW5hdmFpbGFibGUgaW4gSmluamEgdGVtcGxhdGVzCiAjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyN9 CiB7JSBtYWNybyBQUkVQQVJFX0hUTUwoKSAtJX0KLSc8aW1nIHNyYyA9ICJ7eyB1c2VybmFtZSB8 IGdyYXZhdGFyIH19IiB3aWR0aCA9ICIxOCIgaGVpZ2h0ID0gIjE4IiBhbHQgPSAiR3JhdmF0YXIg aW1hZ2UgZm9yIHt7IHVzZXJuYW1lIH19IiA+IHt7IHVzZXJuYW1lIH19IDxzcGFuIGNsYXNzPSJj YXJldCI+PC9zcGFuPic7CisnPGltZyBzcmMgPSAie3sgdXNlcm5hbWUgfCBncmF2YXRhciB9fSIg d2lkdGggPSAiMTgiIGhlaWdodCA9ICIxOCIgYWx0ID0gIkdyYXZhdGFyIGltYWdlIGZvciB7eyB1 c2VybmFtZSB9fSIgPiB7eyB1c2VybmFtZSB9fSAoe3thdXRoX3NvdXJjZX19KSA8c3BhbiBjbGFz cz0iY2FyZXQiPjwvc3Bhbj4nOwogeyUtIGVuZG1hY3JvICV9CmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi9icm93c2VyL3Rlc3RzL3Rlc3RfY2hhbmdlX3Bhc3N3b3JkLnB5IGIvd2ViL3BnYWRtaW4v YnJvd3Nlci90ZXN0cy90ZXN0X2NoYW5nZV9wYXNzd29yZC5weQppbmRleCAwNGM0OWEyM2UuLmZi ODZlNGRmZCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZXN0cy90ZXN0X2NoYW5n ZV9wYXNzd29yZC5weQorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3Rlc3RzL3Rlc3RfY2hhbmdl X3Bhc3N3b3JkLnB5CkBAIC05NSw2ICs5NSw3IEBAIGNsYXNzIENoYW5nZVBhc3N3b3JkVGVzdENh c2UoQmFzZVRlc3RHZW5lcmF0b3IpOgogICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnRlc3Rl ci5wb3N0KAogICAgICAgICAgICAgICAgICcvdXNlcl9tYW5hZ2VtZW50L3VzZXIvJywKICAgICAg ICAgICAgICAgICBkYXRhPWpzb24uZHVtcHMoZGljdCgKKyAgICAgICAgICAgICAgICAgICAgdXNl cm5hbWU9c2VsZi51c2VybmFtZSwKICAgICAgICAgICAgICAgICAgICAgZW1haWw9c2VsZi51c2Vy bmFtZSwKICAgICAgICAgICAgICAgICAgICAgbmV3UGFzc3dvcmQ9c2VsZi5wYXNzd29yZCwKICAg ICAgICAgICAgICAgICAgICAgY29uZmlybVBhc3N3b3JkPXNlbGYucGFzc3dvcmQsCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3Rlc3RzL3Rlc3RfbGRhcF9sb2dpbi5weSBiL3dlYi9w Z2FkbWluL2Jyb3dzZXIvdGVzdHMvdGVzdF9sZGFwX2xvZ2luLnB5Cm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMC4uMmY1OWRmZmY2Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3Bn YWRtaW4vYnJvd3Nlci90ZXN0cy90ZXN0X2xkYXBfbG9naW4ucHkKQEAgLTAsMCArMSw4OCBAQAor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworIwor IyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDIwLCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFt CisjIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5j ZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW1wb3J0IGNvbmZpZyBhcyBhcHBfY29uZmlnCitm cm9tIHBnYWRtaW4udXRpbHMucm91dGUgaW1wb3J0IEJhc2VUZXN0R2VuZXJhdG9yCitmcm9tIHJl Z3Jlc3Npb24ucHl0aG9uX3Rlc3RfdXRpbHMgaW1wb3J0IHRlc3RfdXRpbHMgYXMgdXRpbHMKK2Zy b20gcmVncmVzc2lvbi50ZXN0X3NldHVwIGltcG9ydCBjb25maWdfZGF0YQorCisKK2NsYXNzIExE QVBMb2dpblRlc3RDYXNlKEJhc2VUZXN0R2VuZXJhdG9yKToKKyAgICAiIiIKKyAgICBUaGlzIGNs YXNzIGNoZWNrcyBsZGFwIGxvZ2luIGZ1bmN0aW9uYWxpdHkKKyAgICBieSB2YWxpZGF0aW5nIGRp ZmZlcmVudCBzY2VuYXJpb3MuCisgICAgIiIiCisKKyAgICBzY2VuYXJpb3MgPSBbCisgICAgICAg ICgnTERBUCBBdXRoZW50aWNhdGlvbicsIGRpY3QoCisgICAgICAgICAgICBjb25maWdfa2V5X3Bh cmFtPSdsZGFwJywKKyAgICAgICAgICAgIGlzX2dyYXZ0YXJfaW1hZ2VfY2hlY2s9RmFsc2UpKSwK KyAgICAgICAgKCdMREFQIFdpdGggU1NMIEF1dGhlbnRpY2F0aW9uJywgZGljdCgKKyAgICAgICAg ICAgIGNvbmZpZ19rZXlfcGFyYW09J2xkYXBfd2l0aF9zc2wnLAorICAgICAgICAgICAgaXNfZ3Jh dnRhcl9pbWFnZV9jaGVjaz1GYWxzZSkpLAorICAgICAgICAoJ0xEQVAgV2l0aCBUTFMgQXV0aGVu dGljYXRpb24nLCBkaWN0KAorICAgICAgICAgICAgY29uZmlnX2tleV9wYXJhbT0nbGRhcF93aXRo X3RscycsCisgICAgICAgICAgICBpc19ncmF2dGFyX2ltYWdlX2NoZWNrPUZhbHNlKSksCisgICAg XQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAg IiIiCisgICAgICAgIFdlIG5lZWQgdG8gbG9nb3V0IHRoZSB0ZXN0IGNsaWVudAorICAgICAgICBh cyB3ZSBhcmUgdGVzdGluZyBsZGFwIGxvZ2luIHNjZW5hcmlvcy4KKyAgICAgICAgIiIiCisgICAg ICAgIGNscy50ZXN0ZXIubG9nb3V0KCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAg aWYgdHlwZShjb25maWdfZGF0YVsnbGRhcF9jb25maWcnXSkgaXMgbGlzdCBhbmRcCisgICAgICAg ICAgICAgICAgbGVuKGNvbmZpZ19kYXRhWydsZGFwX2NvbmZpZyddKSA+IDAgYW5kXAorICAgICAg ICAgICAgICAgIHNlbGYuY29uZmlnX2tleV9wYXJhbSBpbiBjb25maWdfZGF0YVsnbGRhcF9jb25m aWcnXVswXToKKyAgICAgICAgICAgIGxkYXBfY29uZmlnID0gY29uZmlnX2RhdGFbJ2xkYXBfY29u ZmlnJ11bMF1bc2VsZi5jb25maWdfa2V5X3BhcmFtXQorCisgICAgICAgICAgICBhcHBfY29uZmln LkFVVEhFTlRJQ0FUSU9OX1NPVVJDRVMgPSBbJ2xkYXAnXQorICAgICAgICAgICAgYXBwX2NvbmZp Zy5MREFQX0FVVE9fQ1JFQVRFX1VTRVIgPSBUcnVlCisgICAgICAgICAgICBhcHBfY29uZmlnLkxE QVBfU0VSVkVSX1VSSSA9IGxkYXBfY29uZmlnWyd1cmknXQorICAgICAgICAgICAgYXBwX2NvbmZp Zy5MREFQX0JBU0VfRE4gPSBsZGFwX2NvbmZpZ1snYmFzZV9kbiddCisgICAgICAgICAgICBhcHBf Y29uZmlnLkxEQVBfVVNFUk5BTUVfQVRUUklCVVRFID0gbGRhcF9jb25maWdbCisgICAgICAgICAg ICAgICAgJ3VzZXJuYW1lX2F0ciddCisgICAgICAgICAgICBhcHBfY29uZmlnLkxEQVBfU0VBUkNI X0JBU0VfRE4gPSBsZGFwX2NvbmZpZ1sKKyAgICAgICAgICAgICAgICAnc2VhcmNoX2Jhc2VfZG4n XQorICAgICAgICAgICAgYXBwX2NvbmZpZy5MREFQX1NFQVJDSF9GSUxURVIgPSBsZGFwX2NvbmZp Z1snc2VhcmNoX2ZpbHRlciddCisgICAgICAgICAgICBhcHBfY29uZmlnLkxEQVBfVVNFX1NUQVJU VExTID0gbGRhcF9jb25maWdbJ3VzZV9zdGFydHRscyddCisgICAgICAgICAgICBhcHBfY29uZmln LkxEQVBfQ0FfQ0VSVF9GSUxFID0gbGRhcF9jb25maWdbJ2NhX2NlcnRfZmlsZSddCisgICAgICAg ICAgICBhcHBfY29uZmlnLkxEQVBfQ0VSVF9GSUxFID0gbGRhcF9jb25maWdbJ2NlcnRfZmlsZSdd CisgICAgICAgICAgICBhcHBfY29uZmlnLkxEQVBfS0VZX0ZJTEUgPSBsZGFwX2NvbmZpZ1sna2V5 X2ZpbGUnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgKKyAgICAg ICAgICAgICAgICAiTERBUCBjb25maWcgbm90IHNldC4iCisgICAgICAgICAgICApCisKKyAgICBk ZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgIiIiVGhpcyBmdW5jdGlvbiBjaGVja3MgbG9naW4g ZnVuY3Rpb25hbGl0eS4iIiIKKyAgICAgICAgdXNlcm5hbWUgPSBjb25maWdfZGF0YVsncGdBZG1p bjRfbGRhcF9jcmVkZW50aWFscyddWydsb2dpbl91c2VybmFtZSddCisgICAgICAgIHBhc3N3b3Jk ID0gY29uZmlnX2RhdGFbJ3BnQWRtaW40X2xkYXBfY3JlZGVudGlhbHMnXVsnbG9naW5fcGFzc3dv cmQnXQorCisgICAgICAgIHJlcyA9IHNlbGYudGVzdGVyLmxvZ2luKHVzZXJuYW1lLCBwYXNzd29y ZCwgVHJ1ZSkKKworICAgICAgICByZXNwZGF0YSA9ICdHcmF2YXRhciBpbWFnZSBmb3IgJXMnICVc CisgICAgICAgICAgICAgICAgICAgY29uZmlnX2RhdGFbJ3BnQWRtaW40X2xkYXBfY3JlZGVudGlh bHMnXVsnbG9naW5fdXNlcm5hbWUnXQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcGRhdGEg aW4gcmVzLmRhdGEuZGVjb2RlKCd1dGY4JykpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6Cisg ICAgICAgIHNlbGYudGVzdGVyLmxvZ291dCgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYg dGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAiIiIKKyAgICAgICAgV2UgbmVlZCB0byBhZ2Fp biBsb2dpbiB0aGUgdGVzdCBjbGllbnQgYXMgc29vbiBhcyB0ZXN0IHNjZW5hcmlvcworICAgICAg ICBmaW5pc2hlcy4KKyAgICAgICAgIiIiCisgICAgICAgIGNscy50ZXN0ZXIubG9nb3V0KCkKKyAg ICAgICAgYXBwX2NvbmZpZy5BVVRIRU5USUNBVElPTl9TT1VSQ0VTID0gWydpbnRlcm5hbCddCisg ICAgICAgIHV0aWxzLmxvZ2luX3Rlc3Rlcl9hY2NvdW50KGNscy50ZXN0ZXIpCmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9icm93c2VyL3Rlc3RzL3Rlc3RfbGRhcF93aXRoX21vY2tpbmcucHkgYi93 ZWIvcGdhZG1pbi9icm93c2VyL3Rlc3RzL3Rlc3RfbGRhcF93aXRoX21vY2tpbmcucHkKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi45MDM4NTI0MmMKLS0tIC9kZXYvbnVsbAor KysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3Rlc3RzL3Rlc3RfbGRhcF93aXRoX21vY2tpbmcucHkK QEAgLTAsMCArMSw4NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9z dGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDIwLCBUaGUgcGdBZG1p biBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhl IFBvc3RncmVTUUwgTGljZW5jZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW1wb3J0IHN5cwor aW1wb3J0IGNvbmZpZyBhcyBhcHBfY29uZmlnCitmcm9tIHBnYWRtaW4udXRpbHMucm91dGUgaW1w b3J0IEJhc2VUZXN0R2VuZXJhdG9yCitmcm9tIHJlZ3Jlc3Npb24ucHl0aG9uX3Rlc3RfdXRpbHMg aW1wb3J0IHRlc3RfdXRpbHMgYXMgdXRpbHMKK2Zyb20gcmVncmVzc2lvbi50ZXN0X3NldHVwIGlt cG9ydCBjb25maWdfZGF0YQorZnJvbSBwZ2FkbWluLmF1dGhlbnRpY2F0ZS5yZWdpc3RyeSBpbXBv cnQgQXV0aFNvdXJjZVJlZ2lzdHJ5CisKK2lmIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMyk6Cisg ICAgZnJvbSBtb2NrIGltcG9ydCBwYXRjaAorZWxzZToKKyAgICBmcm9tIHVuaXR0ZXN0Lm1vY2sg aW1wb3J0IHBhdGNoCisKKworY2xhc3MgTERBUExvZ2luTW9ja1Rlc3RDYXNlKEJhc2VUZXN0R2Vu ZXJhdG9yKToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIGNoZWNrcyBsZGFwIGxvZ2luIGZ1bmN0 aW9uYWxpdHkgYnkgbW9ja2luZworICAgIGxkYXAgY29ubmVjdGlvbiBhbmQgbGRhcCBzZWFyY2gg ZnVuY3Rpb25hbGl0eS4KKyAgICAiIiIKKworICAgIHNjZW5hcmlvcyA9IFsKKyAgICAgICAgKCdM REFQIEF1dGhlbnRpY2F0aW9uIHdpdGggQXV0byBDcmVhdGUgVXNlcicsIGRpY3QoCisgICAgICAg ICAgICBhdXRoX3NvdXJjZT1bJ2xkYXAnXSwKKyAgICAgICAgICAgIGF1dG9fY3JlYXRlX3VzZXI9 VHJ1ZSwKKyAgICAgICAgICAgIHVzZXJuYW1lPSdsZGFwX3VzZXInLAorICAgICAgICAgICAgcGFz c3dvcmQ9J2xkYXBfcGFzcycpKSwKKyAgICAgICAgKCdMREFQIEF1dGhlbnRpY2F0aW9uIHdpdGhv dXQgQXV0byBDcmVhdGUgVXNlcicsIGRpY3QoCisgICAgICAgICAgICBhdXRoX3NvdXJjZT1bJ2xk YXAnXSwKKyAgICAgICAgICAgIGF1dG9fY3JlYXRlX3VzZXI9RmFsc2UsCisgICAgICAgICAgICB1 c2VybmFtZT0nbGRhcF91c2VyJywKKyAgICAgICAgICAgIHBhc3N3b3JkPSdsZGFwX3Bhc3MnKSks CisgICAgICAgICgnTERBUCArIEludGVybmFsIEF1dGhlbnRpY2F0aW9uJywgZGljdCgKKyAgICAg ICAgICAgIGF1dGhfc291cmNlPVsnbGRhcCcsICdpbnRlcm5hbCddLAorICAgICAgICAgICAgYXV0 b19jcmVhdGVfdXNlcj1GYWxzZSwKKyAgICAgICAgICAgIHVzZXJuYW1lPWNvbmZpZ19kYXRhWwor ICAgICAgICAgICAgICAgICdwZ0FkbWluNF9sb2dpbl9jcmVkZW50aWFscyddWydsb2dpbl91c2Vy bmFtZSddLAorICAgICAgICAgICAgcGFzc3dvcmQ9Y29uZmlnX2RhdGFbCisgICAgICAgICAgICAg ICAgJ3BnQWRtaW40X2xvZ2luX2NyZWRlbnRpYWxzJ11bJ2xvZ2luX3Bhc3N3b3JkJ10KKyAgICAg ICAgKSkKKyAgICBdCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMp OgorICAgICAgICAiIiIKKyAgICAgICAgV2UgbmVlZCB0byBsb2dvdXQgdGhlIHRlc3QgY2xpZW50 IGFzIHdlIGFyZSB0ZXN0aW5nCisgICAgICAgIGxkYXAgbG9naW4gc2NlbmFyaW9zLgorICAgICAg ICAiIiIKKyAgICAgICAgY2xzLnRlc3Rlci5sb2dvdXQoKQorCisgICAgZGVmIHNldFVwKHNlbGYp OgorICAgICAgICBhcHBfY29uZmlnLkFVVEhFTlRJQ0FUSU9OX1NPVVJDRVMgPSBzZWxmLmF1dGhf c291cmNlCisgICAgICAgIGFwcF9jb25maWcuTERBUF9BVVRPX0NSRUFURV9VU0VSID0gc2VsZi5h dXRvX2NyZWF0ZV91c2VyCisKKyAgICBAcGF0Y2gub2JqZWN0KEF1dGhTb3VyY2VSZWdpc3RyeS5y ZWdpc3RyeVsnbGRhcCddLCAnY29ubmVjdCcsCisgICAgICAgICAgICAgICAgICByZXR1cm5fdmFs dWU9W1RydWUsICJEb25lIl0pCisgICAgQHBhdGNoLm9iamVjdChBdXRoU291cmNlUmVnaXN0cnku cmVnaXN0cnlbJ2xkYXAnXSwgJ3NlYXJjaF9sZGFwX3VzZXInLAorICAgICAgICAgICAgICAgICAg cmV0dXJuX3ZhbHVlPVtUcnVlLCAnJ10pCisgICAgZGVmIHJ1blRlc3Qoc2VsZiwgY29ubl9tb2Nr X29iaiwgc2VhcmNoX21vY2tfb2JqKToKKyAgICAgICAgIiIiVGhpcyBmdW5jdGlvbiBjaGVja3Mg bGRhcCBsb2dpbiBmdW5jdGlvbmFsaXR5LiIiIgorCisgICAgICAgIHJlcyA9IHNlbGYudGVzdGVy LmxvZ2luKHNlbGYudXNlcm5hbWUsIHNlbGYucGFzc3dvcmQsIFRydWUpCisgICAgICAgIHJlc3Bk YXRhID0gJ0dyYXZhdGFyIGltYWdlIGZvciAlcycgJSBzZWxmLnVzZXJuYW1lCisgICAgICAgIHNl bGYuYXNzZXJ0VHJ1ZShyZXNwZGF0YSBpbiByZXMuZGF0YS5kZWNvZGUoJ3V0ZjgnKSkKKworICAg IGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0ZXIubG9nb3V0KCkKKworICAg IEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICIiIgor ICAgICAgICBXZSBuZWVkIHRvIGFnYWluIGxvZ2luIHRoZSB0ZXN0IGNsaWVudCBhcyBzb29uIGFz IHRlc3Qgc2NlbmFyaW9zCisgICAgICAgIGZpbmlzaGVzLgorICAgICAgICAiIiIKKyAgICAgICAg Y2xzLnRlc3Rlci5sb2dvdXQoKQorICAgICAgICBhcHBfY29uZmlnLkFVVEhFTlRJQ0FUSU9OX1NP VVJDRVMgPSBbJ2ludGVybmFsJ10KKyAgICAgICAgdXRpbHMubG9naW5fdGVzdGVyX2FjY291bnQo Y2xzLnRlc3RlcikKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21vZGVsL19faW5pdF9fLnB5IGIv d2ViL3BnYWRtaW4vbW9kZWwvX19pbml0X18ucHkKaW5kZXggZjU4OGU0MDFjLi5lM2FmNjYwYjAg MTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL21vZGVsL19faW5pdF9fLnB5CisrKyBiL3dlYi9wZ2Fk bWluL21vZGVsL19faW5pdF9fLnB5CkBAIC0yOSw3ICsyOSw3IEBAIGZyb20gZmxhc2tfc3FsYWxj aGVteSBpbXBvcnQgU1FMQWxjaGVteQogIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotU0NIRU1BX1ZF UlNJT04gPSAyNAorU0NIRU1BX1ZFUlNJT04gPSAyNQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIwpA QCAtNjYsMTMgKzY2LDE1IEBAIGNsYXNzIFVzZXIoZGIuTW9kZWwsIFVzZXJNaXhpbik6CiAgICAg IiIiRGVmaW5lIGEgdXNlciBvYmplY3QiIiIKICAgICBfX3RhYmxlbmFtZV9fID0gJ3VzZXInCiAg ICAgaWQgPSBkYi5Db2x1bW4oZGIuSW50ZWdlciwgcHJpbWFyeV9rZXk9VHJ1ZSkKLSAgICBlbWFp bCA9IGRiLkNvbHVtbihkYi5TdHJpbmcoMjU2KSwgdW5pcXVlPVRydWUsIG51bGxhYmxlPUZhbHNl KQorICAgIGVtYWlsID0gZGIuQ29sdW1uKGRiLlN0cmluZygyNTYpLCBudWxsYWJsZT1UcnVlKQor ICAgIHVzZXJuYW1lID0gZGIuQ29sdW1uKGRiLlN0cmluZyg2NCksIHVuaXF1ZT1UcnVlLCBudWxs YWJsZT1GYWxzZSkKICAgICBwYXNzd29yZCA9IGRiLkNvbHVtbihkYi5TdHJpbmcoMjU2KSkKICAg ICBhY3RpdmUgPSBkYi5Db2x1bW4oZGIuQm9vbGVhbigpLCBudWxsYWJsZT1GYWxzZSkKICAgICBj b25maXJtZWRfYXQgPSBkYi5Db2x1bW4oZGIuRGF0ZVRpbWUoKSkKICAgICBtYXN0ZXJwYXNzX2No ZWNrID0gZGIuQ29sdW1uKGRiLlN0cmluZygyNTYpKQogICAgIHJvbGVzID0gZGIucmVsYXRpb25z aGlwKCdSb2xlJywgc2Vjb25kYXJ5PXJvbGVzX3VzZXJzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJhY2tyZWY9ZGIuYmFja3JlZigndXNlcnMnLCBsYXp5PSdkeW5hbWljJykpCisgICAg YXV0aF9zb3VyY2UgPSBkYi5Db2x1bW4oZGIuU3RyaW5nKDE2KSwgdW5pcXVlPVRydWUsIG51bGxh YmxlPUZhbHNlKQogCiAKIGNsYXNzIFNldHRpbmcoZGIuTW9kZWwpOgpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vdGVtcGxhdGVzL3NlY3VyaXR5L2ZpZWxkcy5odG1sIGIvd2ViL3BnYWRtaW4vdGVt cGxhdGVzL3NlY3VyaXR5L2ZpZWxkcy5odG1sCmluZGV4IGVmYjEyNmIyZS4uYzUwNWRhMzY2IDEw MDY0NAotLS0gYS93ZWIvcGdhZG1pbi90ZW1wbGF0ZXMvc2VjdXJpdHkvZmllbGRzLmh0bWwKKysr IGIvd2ViL3BnYWRtaW4vdGVtcGxhdGVzL3NlY3VyaXR5L2ZpZWxkcy5odG1sCkBAIC05LDMgKzks MTQgQEAKICAgICB7JSBlbmRpZiAlfQogPC9kaXY+CiB7JSBlbmRtYWNybyAlfQoreyUgbWFjcm8g cmVuZGVyX3VzZXJuYW1lX3dpdGhfZXJyb3JzKGZpZWxkLCB0eXBlKSAlfQorPGRpdiBjbGFzcz0i Zm9ybS1ncm91cCBtYi0zIHslIGlmIGZpZWxkLmVycm9ycyAlfSBoYXMtZXJyb3J7JSBlbmRpZiAl fSI+CisgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSJ7eyBmaWVs ZC5sYWJlbC50ZXh0IH19IC8gVXNlcm5hbWUiIG5hbWU9Int7IGZpZWxkLm5hbWUgfX0iCisgICAg ICAgICAgIHR5cGU9InslIGlmIHR5cGUgJX17eyB0eXBlIH19eyUgZWxzZSAlfXt7IGZpZWxkLnR5 cGUgfX17JSBlbmRpZiAlfSIgYXV0b2ZvY3VzPgorICAgIHslIGlmIGZpZWxkLmVycm9ycyAlfQor ICAgIHslIGZvciBlcnJvciBpbiBmaWVsZC5lcnJvcnMgJX0KKyAgICA8c3BhbiBjbGFzcz0iZm9y bS10ZXh0Ij57eyBlcnJvciB9fTwvc3Bhbj4KKyAgICB7JSBlbmRmb3IgJX0KKyAgICB7JSBlbmRp ZiAlfQorPC9kaXY+Cit7JSBlbmRtYWNybyAlfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdGVt cGxhdGVzL3NlY3VyaXR5L2xvZ2luX3VzZXIuaHRtbCBiL3dlYi9wZ2FkbWluL3RlbXBsYXRlcy9z ZWN1cml0eS9sb2dpbl91c2VyLmh0bWwKaW5kZXggNzUxNWMyYzJhLi4yZTkyZDdiMTIgMTAwNjQ0 Ci0tLSBhL3dlYi9wZ2FkbWluL3RlbXBsYXRlcy9zZWN1cml0eS9sb2dpbl91c2VyLmh0bWwKKysr IGIvd2ViL3BnYWRtaW4vdGVtcGxhdGVzL3NlY3VyaXR5L2xvZ2luX3VzZXIuaHRtbApAQCAtNywx MCArNywxMCBAQAogeyUgYmxvY2sgcGFuZWxfdGl0bGUgJX17eyBfKCdMb2dpbicpIH19eyUgZW5k YmxvY2sgJX0KIHslIGJsb2NrIHBhbmVsX2JvZHkgJX0KIHslIGlmIGNvbmZpZy5TRVJWRVJfTU9E RSAlfQotPGZvcm0gYWN0aW9uPSJ7eyB1cmxfZm9yX3NlY3VyaXR5KCdsb2dpbicpIH19IiBtZXRo b2Q9IlBPU1QiIG5hbWU9ImxvZ2luX3VzZXJfZm9ybSI+Cis8Zm9ybSBhY3Rpb249Int7IHVybF9m b3IoJ2F1dGhlbnRpY2F0ZS5sb2dpbicpIH19IiBtZXRob2Q9IlBPU1QiIG5hbWU9ImxvZ2luX3Vz ZXJfZm9ybSI+CiAgICAge3sgbG9naW5fdXNlcl9mb3JtLmhpZGRlbl90YWcoKSB9fQogICAgIHsl IHNldCB1c2VyX2xhbmd1YWdlID0gcmVxdWVzdC5jb29raWVzLmdldCgnUEdBRE1JTl9MQU5HVUFH RScpIG9yICdlbicgJX0KLSAgICB7eyByZW5kZXJfZmllbGRfd2l0aF9lcnJvcnMobG9naW5fdXNl cl9mb3JtLmVtYWlsLCAidGV4dCIpIH19CisgICAge3sgcmVuZGVyX3VzZXJuYW1lX3dpdGhfZXJy b3JzKGxvZ2luX3VzZXJfZm9ybS5lbWFpbCwgInRleHQiKSB9fQogICAgIHt7IHJlbmRlcl9maWVs ZF93aXRoX2Vycm9ycyhsb2dpbl91c2VyX2Zvcm0ucGFzc3dvcmQsICJwYXNzd29yZCIpIH19CiAg ICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IGJ0bi1ibG9jayBidG4tbG9naW4iIHR5 cGU9InN1Ym1pdCIgdmFsdWU9Int7IF8oJ0xvZ2luJykgfX0iPnt7IF8oJ0xvZ2luJykgfX08L2J1 dHRvbj4KICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIHJvdyBtYi0zIGMgdXNlci1sYW5ndWFn ZSI+CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90ZW1wbGF0ZXMvc2VjdXJpdHkvcGFuZWwuaHRt bCBiL3dlYi9wZ2FkbWluL3RlbXBsYXRlcy9zZWN1cml0eS9wYW5lbC5odG1sCmluZGV4IDdkZTFk OWQ5MC4uMTQ1MmRlOGNhIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi90ZW1wbGF0ZXMvc2VjdXJp dHkvcGFuZWwuaHRtbAorKysgYi93ZWIvcGdhZG1pbi90ZW1wbGF0ZXMvc2VjdXJpdHkvcGFuZWwu aHRtbApAQCAtMSw1ICsxLDUgQEAKIHslIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KLXslIGZyb20g InNlY3VyaXR5L2ZpZWxkcy5odG1sIiBpbXBvcnQgcmVuZGVyX2ZpZWxkX3dpdGhfZXJyb3JzICV9 Cit7JSBmcm9tICJzZWN1cml0eS9maWVsZHMuaHRtbCIgaW1wb3J0IHJlbmRlcl9maWVsZF93aXRo X2Vycm9ycywgcmVuZGVyX3VzZXJuYW1lX3dpdGhfZXJyb3JzICV9CiB7JSBibG9jayBib2R5ICV9 CiA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQgaC0xMDAgbG9naW5fcGFnZSI+CiAgICAgeyUg aWYgY29uZmlnLkxPR0lOX0JBTk5FUiBpcyBkZWZpbmVkIGFuZCBjb25maWcuTE9HSU5fQkFOTkVS ICE9ICIiICV9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy91c2VyX21hbmFnZW1lbnQv X19pbml0X18ucHkgYi93ZWIvcGdhZG1pbi90b29scy91c2VyX21hbmFnZW1lbnQvX19pbml0X18u cHkKaW5kZXggNTUzNjUxNzNmLi43NjIyNjQ1YTAgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rv b2xzL3VzZXJfbWFuYWdlbWVudC9fX2luaXRfXy5weQorKysgYi93ZWIvcGdhZG1pbi90b29scy91 c2VyX21hbmFnZW1lbnQvX19pbml0X18ucHkKQEAgLTc0LDcgKzc0LDggQEAgY2xhc3MgVXNlck1h bmFnZW1lbnRNb2R1bGUoUGdBZG1pbk1vZHVsZSk6CiAgICAgICAgICAgICAndXNlcl9tYW5hZ2Vt ZW50LnJvbGVzJywgJ3VzZXJfbWFuYWdlbWVudC5yb2xlJywKICAgICAgICAgICAgICd1c2VyX21h bmFnZW1lbnQudXBkYXRlX3VzZXInLCAndXNlcl9tYW5hZ2VtZW50LmRlbGV0ZV91c2VyJywKICAg ICAgICAgICAgICd1c2VyX21hbmFnZW1lbnQuY3JlYXRlX3VzZXInLCAndXNlcl9tYW5hZ2VtZW50 LnVzZXJzJywKLSAgICAgICAgICAgICd1c2VyX21hbmFnZW1lbnQudXNlcicsIGN1cnJlbnRfYXBw LmxvZ2luX21hbmFnZXIubG9naW5fdmlldworICAgICAgICAgICAgJ3VzZXJfbWFuYWdlbWVudC51 c2VyJywgY3VycmVudF9hcHAubG9naW5fbWFuYWdlci5sb2dpbl92aWV3LAorICAgICAgICAgICAg J3VzZXJfbWFuYWdlbWVudC5hdXRoX3NvdXJjZXMnLCAndXNlcl9tYW5hZ2VtZW50LmF1dGhfc291 cmNlcycKICAgICAgICAgXQogCiAKQEAgLTEwMCw3ICsxMDEsNyBAQCBkZWYgdmFsaWRhdGVfdXNl cihkYXRhKToKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihfKCJQ YXNzd29yZHMgZG8gbm90IG1hdGNoLiIpKQogCi0gICAgaWYgJ2VtYWlsJyBpbiBkYXRhIGFuZCBk YXRhWydlbWFpbCddICE9ICIiOgorICAgIGlmICdlbWFpbCcgaW4gZGF0YSBhbmQgZGF0YVsnZW1h aWwnXSBhbmQgZGF0YVsnZW1haWwnXSAhPSAiIjoKICAgICAgICAgaWYgZW1haWxfZmlsdGVyLm1h dGNoKGRhdGFbJ2VtYWlsJ10pOgogICAgICAgICAgICAgbmV3X2RhdGFbJ2VtYWlsJ10gPSBkYXRh WydlbWFpbCddCiAgICAgICAgIGVsc2U6CkBAIC0xMTIsNiArMTEzLDEyIEBAIGRlZiB2YWxpZGF0 ZV91c2VyKGRhdGEpOgogICAgIGlmICdhY3RpdmUnIGluIGRhdGEgYW5kIGRhdGFbJ2FjdGl2ZSdd ICE9ICIiOgogICAgICAgICBuZXdfZGF0YVsnYWN0aXZlJ10gPSBkYXRhWydhY3RpdmUnXQogCisg ICAgaWYgJ3VzZXJuYW1lJyBpbiBkYXRhIGFuZCBkYXRhWyd1c2VybmFtZSddICE9ICIiOgorICAg ICAgICBuZXdfZGF0YVsndXNlcm5hbWUnXSA9IGRhdGFbJ3VzZXJuYW1lJ10KKworICAgIGlmICdz b3VyY2UnIGluIGRhdGEgYW5kIGRhdGFbJ3NvdXJjZSddICE9ICIiOgorICAgICAgICBuZXdfZGF0 YVsnYXV0aF9zb3VyY2UnXSA9IGRhdGFbJ3NvdXJjZSddCisKICAgICByZXR1cm4gbmV3X2RhdGEK IAogCkBAIC0xNTUsNiArMTYyLDcgQEAgZGVmIGN1cnJlbnRfdXNlcl9pbmZvKCk6CiAgICAgICAg ICAgICBlbHNlICdmYWxzZScsCiAgICAgICAgICAgICBhbGxvd19zYXZlX3R1bm5lbF9wYXNzd29y ZD0ndHJ1ZScKICAgICAgICAgICAgIGlmIGNvbmZpZy5BTExPV19TQVZFX1RVTk5FTF9QQVNTV09S RCBlbHNlICdmYWxzZScsCisgICAgICAgICAgICBhdXRoX3NvdXJjZXM9Y29uZmlnLkFVVEhFTlRJ Q0FUSU9OX1NPVVJDRVMsCiAgICAgICAgICksCiAgICAgICAgIHN0YXR1cz0yMDAsCiAgICAgICAg IG1pbWV0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IgpAQCAtMTgwLDkgKzE4OCwxMSBAQCBk ZWYgdXNlcih1aWQpOgogICAgICAgICB1ID0gVXNlci5xdWVyeS5nZXQodWlkKQogCiAgICAgICAg IHJlcyA9IHsnaWQnOiB1LmlkLAorICAgICAgICAgICAgICAgJ3VzZXJuYW1lJzogdS51c2VybmFt ZSwKICAgICAgICAgICAgICAgICdlbWFpbCc6IHUuZW1haWwsCiAgICAgICAgICAgICAgICAnYWN0 aXZlJzogdS5hY3RpdmUsCi0gICAgICAgICAgICAgICAncm9sZSc6IHUucm9sZXNbMF0uaWQKKyAg ICAgICAgICAgICAgICdyb2xlJzogdS5yb2xlc1swXS5pZCwKKyAgICAgICAgICAgICAgICdzb3Vy Y2VzJzogdS5hdXRoX3NvdXJjZQogICAgICAgICAgICAgICAgfQogICAgIGVsc2U6CiAgICAgICAg IHVzZXJzID0gVXNlci5xdWVyeS5hbGwoKQpAQCAtMTkwLDkgKzIwMCwxMSBAQCBkZWYgdXNlcih1 aWQpOgogICAgICAgICB1c2Vyc19kYXRhID0gW10KICAgICAgICAgZm9yIHUgaW4gdXNlcnM6CiAg ICAgICAgICAgICB1c2Vyc19kYXRhLmFwcGVuZCh7J2lkJzogdS5pZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAndXNlcm5hbWUnOiB1LnVzZXJuYW1lLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdlbWFpbCc6IHUuZW1haWwsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ2FjdGl2ZSc6IHUuYWN0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdyb2xlJzogdS5yb2xlc1swXS5pZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdyb2xlJzogdS5yb2xlc1swXS5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn c291cmNlJzogdS5hdXRoX3NvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0p CiAKICAgICAgICAgcmVzID0gdXNlcnNfZGF0YQpAQCAtMjE1LDExICsyMjcsMjkgQEAgZGVmIGNy ZWF0ZSgpOgogICAgICAgICByZXF1ZXN0LmRhdGEsIGVuY29kaW5nPSd1dGYtOCcKICAgICApCiAK LSAgICBmb3IgZiBpbiAoJ2VtYWlsJywgJ3JvbGUnLCAnYWN0aXZlJywgJ25ld1Bhc3N3b3JkJywg J2NvbmZpcm1QYXNzd29yZCcpOgorICAgIHN0YXR1cywgcmVzID0gY3JlYXRlX3VzZXIoZGF0YSkK KworICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJy b3IoZXJyb3Jtc2c9cmVzKQorCisgICAgcmV0dXJuIGFqYXhfcmVzcG9uc2UoCisgICAgICAgIHJl c3BvbnNlPXJlcywKKyAgICAgICAgc3RhdHVzPTIwMAorICAgICkKKworCitkZWYgY3JlYXRlX3Vz ZXIoZGF0YSk6CisgICAgaWYgJ3NvdXJjZScgaW4gZGF0YSBhbmQgZGF0YVsnc291cmNlJ10gIT0g J2ludGVybmFsJzoKKyAgICAgICAgcmVxX3BhcmFtcyA9ICgndXNlcm5hbWUnLCAncm9sZScsICdh Y3RpdmUnLCAnc291cmNlJykKKyAgICBlbHNlOgorICAgICAgICByZXFfcGFyYW1zID0gKCdlbWFp bCcsICdyb2xlJywgJ2FjdGl2ZScsICduZXdQYXNzd29yZCcsCisgICAgICAgICAgICAgICAgICAg ICAgJ2NvbmZpcm1QYXNzd29yZCcpCisKKyAgICBmb3IgZiBpbiByZXFfcGFyYW1zOgogICAgICAg ICBpZiBmIGluIGRhdGEgYW5kIGRhdGFbZl0gIT0gJyc6CiAgICAgICAgICAgICBjb250aW51ZQog ICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIGJhZF9yZXF1ZXN0KGVycm9ybXNnPV8o Ik1pc3NpbmcgZmllbGQ6ICd7MH0nIi5mb3JtYXQoZikpKQorICAgICAgICAgICAgcmV0dXJuIEZh bHNlLCBfKCJNaXNzaW5nIGZpZWxkOiAnezB9JyIuZm9ybWF0KGYpKQogCiAgICAgdHJ5OgogICAg ICAgICBuZXdfZGF0YSA9IHZhbGlkYXRlX3VzZXIoZGF0YSkKQEAgLTIyOCwxMyArMjU4LDIzIEBA IGRlZiBjcmVhdGUoKToKICAgICAgICAgICAgIG5ld19kYXRhWydyb2xlcyddID0gW1JvbGUucXVl cnkuZ2V0KG5ld19kYXRhWydyb2xlcyddKV0KIAogICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToK LSAgICAgICAgcmV0dXJuIGJhZF9yZXF1ZXN0KGVycm9ybXNnPV8oc3RyKGUpKSkKKyAgICAgICAg cmV0dXJuIEZhbHNlLCBzdHIoZSkKIAogICAgIHRyeToKLSAgICAgICAgdXNyID0gVXNlcihlbWFp bD1uZXdfZGF0YVsnZW1haWwnXSwKKworICAgICAgICB1c2VybmFtZSA9IG5ld19kYXRhWyd1c2Vy bmFtZSddIGlmICd1c2VybmFtZScgaW4gbmV3X2RhdGEgXAorICAgICAgICAgICAgZWxzZSBuZXdf ZGF0YVsnZW1haWwnXQorICAgICAgICBlbWFpbCA9IG5ld19kYXRhWydlbWFpbCddIGlmICdlbWFp bCcgaW4gbmV3X2RhdGEgZWxzZSBOb25lCisgICAgICAgIHBhc3N3b3JkID0gbmV3X2RhdGFbJ3Bh c3N3b3JkJ10gaWYgJ3Bhc3N3b3JkJyBpbiBuZXdfZGF0YSBlbHNlIE5vbmUKKyAgICAgICAgc291 cmNlID0gbmV3X2RhdGFbJ3NvdXJjZSddIGlmICdzb3VyY2UnIGluIG5ld19kYXRhIFwKKyAgICAg ICAgICAgIGVsc2UgY3VycmVudF9hcHAuUEdBRE1JTl9ERUZBVUxUX0FVVEhfU09VUkNFCisKKyAg ICAgICAgdXNyID0gVXNlcih1c2VybmFtZT11c2VybmFtZSwKKyAgICAgICAgICAgICAgICAgICBl bWFpbD1lbWFpbCwKICAgICAgICAgICAgICAgICAgICByb2xlcz1uZXdfZGF0YVsncm9sZXMnXSwK ICAgICAgICAgICAgICAgICAgICBhY3RpdmU9bmV3X2RhdGFbJ2FjdGl2ZSddLAotICAgICAgICAg ICAgICAgICAgIHBhc3N3b3JkPW5ld19kYXRhWydwYXNzd29yZCddKQorICAgICAgICAgICAgICAg ICAgIHBhc3N3b3JkPXBhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgIGF1dGhfc291cmNlPXNv dXJjZSkKICAgICAgICAgZGIuc2Vzc2lvbi5hZGQodXNyKQogICAgICAgICBkYi5zZXNzaW9uLmNv bW1pdCgpCiAgICAgICAgICMgQWRkIGRlZmF1bHQgc2VydmVyIGdyb3VwIGZvciBuZXcgdXNlci4K QEAgLTI0MiwxOCArMjgyLDE1IEBAIGRlZiBjcmVhdGUoKToKICAgICAgICAgZGIuc2Vzc2lvbi5h ZGQoc2VydmVyX2dyb3VwKQogICAgICAgICBkYi5zZXNzaW9uLmNvbW1pdCgpCiAgICAgZXhjZXB0 IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVy cm9ybXNnPXN0cihlKSkKKyAgICAgICAgcmV0dXJuIEZhbHNlLCBzdHIoZSkKIAotICAgIHJlcyA9 IHsnaWQnOiB1c3IuaWQsCi0gICAgICAgICAgICdlbWFpbCc6IHVzci5lbWFpbCwKLSAgICAgICAg ICAgJ2FjdGl2ZSc6IHVzci5hY3RpdmUsCi0gICAgICAgICAgICdyb2xlJzogdXNyLnJvbGVzWzBd LmlkCi0gICAgICAgICAgIH0KLQotICAgIHJldHVybiBhamF4X3Jlc3BvbnNlKAotICAgICAgICBy ZXNwb25zZT1yZXMsCi0gICAgICAgIHN0YXR1cz0yMDAKLSAgICApCisgICAgcmV0dXJuIFRydWUs IHsKKyAgICAgICAgJ2lkJzogdXNyLmlkLAorICAgICAgICAndXNlcm5hbWUnOiB1c3IudXNlcm5h bWUsCisgICAgICAgICdlbWFpbCc6IHVzci5lbWFpbCwKKyAgICAgICAgJ2FjdGl2ZSc6IHVzci5h Y3RpdmUsCisgICAgICAgICdyb2xlJzogdXNyLnJvbGVzWzBdLmlkCisgICAgfQogCiAKIEBibHVl cHJpbnQucm91dGUoCkBAIC0zMzcsOSArMzc0LDExIEBAIGRlZiB1cGRhdGUodWlkKToKICAgICAg ICAgZGIuc2Vzc2lvbi5jb21taXQoKQogCiAgICAgICAgIHJlcyA9IHsnaWQnOiB1c3IuaWQsCisg ICAgICAgICAgICAgICAndXNlcm5hbWUnOiB1c3IudXNlcm5hbWUsCiAgICAgICAgICAgICAgICAn ZW1haWwnOiB1c3IuZW1haWwsCiAgICAgICAgICAgICAgICAnYWN0aXZlJzogdXNyLmFjdGl2ZSwK LSAgICAgICAgICAgICAgICdyb2xlJzogdXNyLnJvbGVzWzBdLmlkCisgICAgICAgICAgICAgICAn cm9sZSc6IHVzci5yb2xlc1swXS5pZCwKKyAgICAgICAgICAgICAgICdzb3VyY2UnOiB1c3IuYXV0 aF9zb3VyY2UKICAgICAgICAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gYWpheF9yZXNwb25z ZSgKQEAgLTM4NCwzICs0MjMsMTcgQEAgZGVmIHJvbGUocmlkKToKICAgICAgICAgcmVzcG9uc2U9 cmVzLAogICAgICAgICBzdGF0dXM9MjAwCiAgICAgKQorCisKK0BibHVlcHJpbnQucm91dGUoCisg ICAgJy9hdXRoX3NvdXJjZXMvJywgbWV0aG9kcz1bJ0dFVCddLCBlbmRwb2ludD0nYXV0aF9zb3Vy Y2VzJworKQorZGVmIGF1dGhfc291cmNlcygpOgorICAgIHNvdXJjZXMgPSBbXQorICAgIGZvciBz b3VyY2UgaW4gY29uZmlnLkFVVEhFTlRJQ0FUSU9OX1NPVVJDRVM6CisgICAgICAgIHNvdXJjZXMu YXBwZW5kKHsnbGFiZWwnOiBzb3VyY2UsICd2YWx1ZSc6IHNvdXJjZX0pCisKKyAgICByZXR1cm4g YWpheF9yZXNwb25zZSgKKyAgICAgICAgcmVzcG9uc2U9c291cmNlcywKKyAgICAgICAgc3RhdHVz PTIwMAorICAgICkKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3VzZXJfbWFuYWdlbWVu dC9zdGF0aWMvanMvdXNlcl9tYW5hZ2VtZW50LmpzIGIvd2ViL3BnYWRtaW4vdG9vbHMvdXNlcl9t YW5hZ2VtZW50L3N0YXRpYy9qcy91c2VyX21hbmFnZW1lbnQuanMKaW5kZXggMmIxZWQxNzI3Li5h ODhhMmM0NTAgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL3VzZXJfbWFuYWdlbWVudC9z dGF0aWMvanMvdXNlcl9tYW5hZ2VtZW50LmpzCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3VzZXJf bWFuYWdlbWVudC9zdGF0aWMvanMvdXNlcl9tYW5hZ2VtZW50LmpzCkBAIC05LDEyICs5LDEyIEBA CiAKIGRlZmluZShbCiAgICdzb3VyY2VzL2dldHRleHQnLCAnc291cmNlcy91cmxfZm9yJywgJ2px dWVyeScsICd1bmRlcnNjb3JlJywgJ3BnYWRtaW4uYWxlcnRpZnlqcycsCi0gICdwZ2FkbWluLmJy b3dzZXInLCAnYmFja2JvbmUnLCAnYmFja2dyaWQnLCAnYmFja2Zvcm0nLCAncGdhZG1pbi5icm93 c2VyLm5vZGUnLAorICAncGdhZG1pbi5icm93c2VyJywgJ2JhY2tib25lJywgJ2JhY2tncmlkJywg J2JhY2tmb3JtJywgJ3BnYWRtaW4uYnJvd3Nlci5ub2RlJywgJ3BnYWRtaW4uYmFja2Zvcm0nLAog ICAncGdhZG1pbi51c2VyX21hbmFnZW1lbnQuY3VycmVudF91c2VyJywKICAgJ2JhY2tncmlkLnNl bGVjdC5hbGwnLCAnYmFja2dyaWQuZmlsdGVyJywKIF0sIGZ1bmN0aW9uKAogICBnZXR0ZXh0LCB1 cmxfZm9yLCAkLCBfLCBhbGVydGlmeSwgcGdCcm93c2VyLCBCYWNrYm9uZSwgQmFja2dyaWQsIEJh Y2tmb3JtLAotICBwZ05vZGUsIHVzZXJJbmZvCisgIHBnTm9kZSwgcGdCYWNrZm9ybSwgdXNlcklu Zm8KICkgewogCiAgIC8vIGlmIG1vZHVsZSBpcyBhbHJlYWR5IGluaXRpYWxpemVkLCByZWZlciB0 byB0aGF0LgpAQCAtMjQsNiArMjQsOCBAQCBkZWZpbmUoWwogCiAgIHZhciBVU0VSVVJMID0gdXJs X2ZvcigndXNlcl9tYW5hZ2VtZW50LnVzZXJzJyksCiAgICAgUk9MRVVSTCA9IHVybF9mb3IoJ3Vz ZXJfbWFuYWdlbWVudC5yb2xlcycpLAorICAgIFNPVVJDRVVSTCA9IHVybF9mb3IoJ3VzZXJfbWFu YWdlbWVudC5hdXRoX3NvdXJjZXMnKSwKKyAgICBBVVRIX09OTFlfSU5URVJOQUwgPSAodXNlcklu Zm9bJ2F1dGhfc291cmNlcyddLmxlbmd0aCAgPT0gMSAmJiB1c2VySW5mb1snYXV0aF9zb3VyY2Vz J10uaW5jbHVkZXMoJ2ludGVybmFsJykpID8gdHJ1ZSA6IGZhbHNlLAogICAgIHVzZXJGaWx0ZXIg PSBmdW5jdGlvbihjb2xsZWN0aW9uKSB7CiAgICAgICByZXR1cm4gKG5ldyBCYWNrZ3JpZC5FeHRl bnNpb24uQ2xpZW50U2lkZUZpbHRlcih7CiAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb24s CkBAIC0zMyw2ICszNSw0MSBAQCBkZWZpbmUoWwogICAgICAgfSkpOwogICAgIH07CiAKKyAgLy8g SW50ZWdlciBDZWxsIGZvciBDb2x1bW5zIExlbmd0aCBhbmQgUHJlY2lzaW9uCisgIHZhciBQYXNz d29yZERlcENlbGwgPSBCYWNrZ3JpZC5FeHRlbnNpb24uUGFzc3dvcmREZXBDZWxsID0KKyAgICBC YWNrZ3JpZC5FeHRlbnNpb24uUGFzc3dvcmRDZWxsLmV4dGVuZCh7CisgICAgICBpbml0aWFsaXpl OiBmdW5jdGlvbigpIHsKKyAgICAgICAgQmFja2dyaWQuRXh0ZW5zaW9uLlBhc3N3b3JkQ2VsbC5w cm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICBCYWNr Z3JpZC5FeHRlbnNpb24uRGVwZW5kZW50Q2VsbC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0 aGlzLCBhcmd1bWVudHMpOworICAgICAgfSwKKyAgICAgIGRlcGVuZGVudENoYW5nZWQ6IGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTsKKyAgICAgICAgdmFyIG1vZGVsID0g dGhpcy5tb2RlbCwKKyAgICAgICAgICBjb2x1bW4gPSB0aGlzLmNvbHVtbiwKKyAgICAgICAgICBl ZGl0YWJsZSA9IHRoaXMuY29sdW1uLmdldCgnZWRpdGFibGUnKSwKKyAgICAgICAgICBpc19lZGl0 YWJsZSA9IF8uaXNGdW5jdGlvbihlZGl0YWJsZSkgPyAhIWVkaXRhYmxlLmFwcGx5KGNvbHVtbiwg W21vZGVsXSkgOiAhIWVkaXRhYmxlOworCisgICAgICAgIGlmIChpc19lZGl0YWJsZSl7IHRoaXMu JGVsLmFkZENsYXNzKCdlZGl0YWJsZScpOyB9CisgICAgICAgIGVsc2UgeyB0aGlzLiRlbC5yZW1v dmVDbGFzcygnZWRpdGFibGUnKTsgfQorCisgICAgICAgIHRoaXMuZGVsZWdhdGVFdmVudHMoKTsK KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICB9LAorICAgICAgcmVuZGVyOiBmdW5jdGlvbigp IHsKKyAgICAgICAgQmFja2dyaWQuTnVtYmVyQ2VsbC5wcm90b3R5cGUucmVuZGVyLmFwcGx5KHRo aXMsIGFyZ3VtZW50cyk7CisKKyAgICAgICAgdmFyIG1vZGVsID0gdGhpcy5tb2RlbCwKKyAgICAg ICAgICBjb2x1bW4gPSB0aGlzLmNvbHVtbiwKKyAgICAgICAgICBlZGl0YWJsZSA9IHRoaXMuY29s dW1uLmdldCgnZWRpdGFibGUnKSwKKyAgICAgICAgICBpc19lZGl0YWJsZSA9IF8uaXNGdW5jdGlv bihlZGl0YWJsZSkgPyAhIWVkaXRhYmxlLmFwcGx5KGNvbHVtbiwgW21vZGVsXSkgOiAhIWVkaXRh YmxlOworCisgICAgICAgIGlmIChpc19lZGl0YWJsZSl7IHRoaXMuJGVsLmFkZENsYXNzKCdlZGl0 YWJsZScpOyB9CisgICAgICAgIGVsc2UgeyB0aGlzLiRlbC5yZW1vdmVDbGFzcygnZWRpdGFibGUn KTsgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgIH0sCisgICAgICByZW1vdmU6IEJhY2tn cmlkLkV4dGVuc2lvbi5EZXBlbmRlbnRDZWxsLnByb3RvdHlwZS5yZW1vdmUsCisgICAgfSk7CisK ICAgcGdCcm93c2VyLlVzZXJNYW5hZ2VtZW50ID0gewogICAgIGluaXQ6IGZ1bmN0aW9uKCkgewog ICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpCkBAIC0yMzUsMjAgKzI3Miw2NyBAQCBkZWZpbmUo WwogICAgIC8vIENhbGxiYWNrIHRvIGRyYXcgVXNlciBNYW5hZ2VtZW50IERpYWxvZy4KICAgICBz aG93X3VzZXJzOiBmdW5jdGlvbigpIHsKICAgICAgIGlmICghdXNlckluZm9bJ2lzX2FkbWluJ10p IHJldHVybjsKLSAgICAgIHZhciBSb2xlcyA9IFtdOworICAgICAgdmFyIFJvbGVzID0gW10sCisg ICAgICAgIFNvdXJjZXMgPSBbXTsKIAogICAgICAgdmFyIFVzZXJNb2RlbCA9IHBnQnJvd3Nlci5O b2RlLk1vZGVsLmV4dGVuZCh7CiAgICAgICAgICAgaWRBdHRyaWJ1dGU6ICdpZCcsCiAgICAgICAg ICAgdXJsUm9vdDogVVNFUlVSTCwKICAgICAgICAgICBkZWZhdWx0czogewogICAgICAgICAgICAg aWQ6IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIHVzZXJuYW1lOiB1bmRlZmluZWQsCiAgICAgICAg ICAgICBlbWFpbDogdW5kZWZpbmVkLAogICAgICAgICAgICAgYWN0aXZlOiB0cnVlLAogICAgICAg ICAgICAgcm9sZTogdW5kZWZpbmVkLAogICAgICAgICAgICAgbmV3UGFzc3dvcmQ6IHVuZGVmaW5l ZCwKICAgICAgICAgICAgIGNvbmZpcm1QYXNzd29yZDogdW5kZWZpbmVkLAorICAgICAgICAgICAg c291cmNlOiAnaW50ZXJuYWwnLAorICAgICAgICAgICAgYXV0aE9ubHlJbnRlcm5hbDogQVVUSF9P TkxZX0lOVEVSTkFMLAogICAgICAgICAgIH0sCiAgICAgICAgICAgc2NoZW1hOiBbeworICAgICAg ICAgICAgaWQ6ICd1c2VybmFtZScsCisgICAgICAgICAgICBsYWJlbDogZ2V0dGV4dCgnVXNlcm5h bWUnKSwKKyAgICAgICAgICAgIHR5cGU6ICd0ZXh0JywKKyAgICAgICAgICAgIGNlbGw6IEJhY2tn cmlkLkV4dGVuc2lvbi5TdHJpbmdEZXBDZWxsLAorICAgICAgICAgICAgY2VsbEhlYWRlckNsYXNz ZXM6ICd3aWR0aF9wZXJjZW50XzMwJywKKyAgICAgICAgICAgIGRlcHM6IFsnaWQnXSwKKyAgICAg ICAgICAgIGVkaXRhYmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICAgIGlmIChtLmdldCgn YXV0aE9ubHlJbnRlcm5hbCcpKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgIHJldHVybiB0 cnVlOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwKKyAgICAg ICAgICB9LCB7CisgICAgICAgICAgICBpZDogJ3NvdXJjZScsCisgICAgICAgICAgICBsYWJlbDog Z2V0dGV4dCgnQXV0aGVudGljYXRpb24gU291cmNlJyksCisgICAgICAgICAgICB0eXBlOiAndGV4 dCcsCisgICAgICAgICAgICBjb250cm9sOiAnU2VsZWN0MicsCisgICAgICAgICAgICB1cmw6IHVy bF9mb3IoJ3VzZXJfbWFuYWdlbWVudC5hdXRoX3NvdXJjZXMnKSwKKyAgICAgICAgICAgIGNlbGxI ZWFkZXJDbGFzc2VzOiAnd2lkdGhfcGVyY2VudF8zMCcsCisgICAgICAgICAgICB2aXNpYmxlOiBm dW5jdGlvbihtKSB7CisgICAgICAgICAgICAgIGlmIChtLmdldCgnYXV0aE9ubHlJbnRlcm5hbCcp KSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg fSwKKyAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwKKyAgICAgICAgICAgIGNlbGw6ICdTZWxl Y3QyJywKKyAgICAgICAgICAgIHNlbGVjdDI6IHsKKyAgICAgICAgICAgICAgYWxsb3dDbGVhcjog ZmFsc2UsCisgICAgICAgICAgICAgIG9wZW5PbkVudGVyOiBmYWxzZSwKKyAgICAgICAgICAgICAg Zmlyc3RfZW1wdHk6IGZhbHNlLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG9wdGlvbnM6 IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICByZXR1cm4gU291cmNlczsKKyAgICAgICAgICAg IH0sCisgICAgICAgICAgICBlZGl0YWJsZTogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgICBp ZiAobSBpbnN0YW5jZW9mIEJhY2tib25lLkNvbGxlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAobS5pc05ldygp ICYmICFtLmdldCgnYXV0aE9ubHlJbnRlcm5hbCcpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu IHRydWU7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh bHNlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgIH0sIHsKICAg ICAgICAgICAgIGlkOiAnZW1haWwnLAogICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ0VtYWls JyksCiAgICAgICAgICAgICB0eXBlOiAndGV4dCcsCkBAIC0yNTYsNiArMzQwLDggQEAgZGVmaW5l KFsKICAgICAgICAgICAgIGNlbGxIZWFkZXJDbGFzc2VzOiAnd2lkdGhfcGVyY2VudF8zMCcsCiAg ICAgICAgICAgICBkZXBzOiBbJ2lkJ10sCiAgICAgICAgICAgICBlZGl0YWJsZTogZnVuY3Rpb24o bSkgeworICAgICAgICAgICAgICBpZiAoIW0uZ2V0KCdhdXRoT25seUludGVybmFsJykpIHJldHVy biB0cnVlOworCiAgICAgICAgICAgICAgIGlmIChtIGluc3RhbmNlb2YgQmFja2JvbmUuQ29sbGVj dGlvbikgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgfQpA QCAtMzI4LDIzICs0MTQsMzggQEAgZGVmaW5lKFsKICAgICAgICAgICAgIHR5cGU6ICdwYXNzd29y ZCcsCiAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsCiAgICAgICAgICAgICBjb250cm9sOiAn aW5wdXQnLAotICAgICAgICAgICAgY2VsbDogJ3Bhc3N3b3JkJywKKyAgICAgICAgICAgIGNlbGw6 IFBhc3N3b3JkRGVwQ2VsbCwKICAgICAgICAgICAgIGNlbGxIZWFkZXJDbGFzc2VzOiAnd2lkdGhf cGVyY2VudF8yMCcsCisgICAgICAgICAgICBkZXBzOiBbJ3NvdXJjZSddLAorICAgICAgICAgICAg ZWRpdGFibGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgICAgaWYgKG0uZ2V0KCdzb3VyY2Un KSA9PSAnaW50ZXJuYWwnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9LAogICAgICAgICAgIH0sIHsKICAgICAgICAgICAgIGlkOiAn Y29uZmlybVBhc3N3b3JkJywKICAgICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDb25maXJtIHBh c3N3b3JkJyksCiAgICAgICAgICAgICB0eXBlOiAncGFzc3dvcmQnLAogICAgICAgICAgICAgZGlz YWJsZWQ6IGZhbHNlLAogICAgICAgICAgICAgY29udHJvbDogJ2lucHV0JywKLSAgICAgICAgICAg IGNlbGw6ICdwYXNzd29yZCcsCisgICAgICAgICAgICBjZWxsOiBQYXNzd29yZERlcENlbGwsCiAg ICAgICAgICAgICBjZWxsSGVhZGVyQ2xhc3NlczogJ3dpZHRoX3BlcmNlbnRfMjAnLAorICAgICAg ICAgICAgZWRpdGFibGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgICAgaWYgKG0uZ2V0KCdz b3VyY2UnKSA9PSAnaW50ZXJuYWwnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9LAogICAgICAgICAgIH1dLAogICAgICAgICAgIHZh bGlkYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIHZhciBlcnJtc2cgPSBudWxsLAogICAg ICAgICAgICAgICBjaGFuZ2VkQXR0cnMgPSB0aGlzLmNoYW5nZWQgfHwge30sCiAgICAgICAgICAg ICAgIGVtYWlsX2ZpbHRlciA9IC9eW2EtekEtWjAtOS4hIyQlJicqK1wvPT9eX2B7fH1+LV0rQFth LXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAt OV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLzsKIAotICAgICAgICAgICAg aWYgKCgnZW1haWwnIGluIGNoYW5nZWRBdHRycyB8fCAhdGhpcy5pc05ldygpKSAmJiAoXy5pc1Vu ZGVmaW5lZCh0aGlzLmdldCgnZW1haWwnKSkgfHwKKyAgICAgICAgICAgIGlmICh0aGlzLmdldCgn c291cmNlJykgPT0gJ2ludGVybmFsJyAmJiAoJ2VtYWlsJyBpbiBjaGFuZ2VkQXR0cnMgfHwgIXRo aXMuaXNOZXcoKSkgJiYgKF8uaXNVbmRlZmluZWQodGhpcy5nZXQoJ2VtYWlsJykpIHx8CiAgICAg ICAgICAgICAgICAgXy5pc051bGwodGhpcy5nZXQoJ2VtYWlsJykpIHx8CiAgICAgICAgICAgICAg ICAgU3RyaW5nKHRoaXMuZ2V0KCdlbWFpbCcpKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpID09 ICcnKSkgewogICAgICAgICAgICAgICBlcnJtc2cgPSBnZXR0ZXh0KCdFbWFpbCBhZGRyZXNzIGNh bm5vdCBiZSBlbXB0eS4nKTsKQEAgLTM1NSwxNiArNDU2LDYgQEAgZGVmaW5lKFsKICAgICAgICAg ICAgICAgZXJybXNnID0gZ2V0dGV4dCgnSW52YWxpZCBlbWFpbCBhZGRyZXNzOiAlcy4nLAogICAg ICAgICAgICAgICAgIHRoaXMuZ2V0KCdlbWFpbCcpCiAgICAgICAgICAgICAgICk7Ci0gICAgICAg ICAgICAgIHRoaXMuZXJyb3JNb2RlbC5zZXQoJ2VtYWlsJywgZXJybXNnKTsKLSAgICAgICAgICAg ICAgcmV0dXJuIGVycm1zZzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoISF0aGlzLmdldCgnZW1h aWwnKSAmJiB0aGlzLmNvbGxlY3Rpb24ud2hlcmUoewotICAgICAgICAgICAgICAnZW1haWwnOiB0 aGlzLmdldCgnZW1haWwnKSwKLSAgICAgICAgICAgIH0pLmxlbmd0aCA+IDEpIHsKLQotICAgICAg ICAgICAgICBlcnJtc2cgPSBnZXR0ZXh0KCdUaGUgZW1haWwgYWRkcmVzcyAlcyBhbHJlYWR5IGV4 aXN0cy4nLAotICAgICAgICAgICAgICAgIHRoaXMuZ2V0KCdlbWFpbCcpCi0gICAgICAgICAgICAg ICk7Ci0KICAgICAgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgnZW1haWwnLCBlcnJtc2cp OwogICAgICAgICAgICAgICByZXR1cm4gZXJybXNnOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAg LTM4NSwxMTEgKzQ3NiwxMTMgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgdGhpcy5lcnJvck1v ZGVsLnVuc2V0KCdyb2xlJyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh0aGlz LmlzTmV3KCkpIHsKLSAgICAgICAgICAgICAgLy8gUGFzc3dvcmQgaXMgY29tcHVsc29yeSBmb3Ig bmV3IHVzZXIuCi0gICAgICAgICAgICAgIGlmICgnbmV3UGFzc3dvcmQnIGluIGNoYW5nZWRBdHRy cyAmJiAoXy5pc1VuZGVmaW5lZCh0aGlzLmdldCgnbmV3UGFzc3dvcmQnKSkgfHwKLSAgICAgICAg ICAgICAgICAgIF8uaXNOdWxsKHRoaXMuZ2V0KCduZXdQYXNzd29yZCcpKSB8fAotICAgICAgICAg ICAgICAgICAgdGhpcy5nZXQoJ25ld1Bhc3N3b3JkJykgPT0gJycpKSB7Ci0KLSAgICAgICAgICAg ICAgICBlcnJtc2cgPSBnZXR0ZXh0KCdQYXNzd29yZCBjYW5ub3QgYmUgZW1wdHkgZm9yIHVzZXIg JXMuJywKLSAgICAgICAgICAgICAgICAgICh0aGlzLmdldCgnZW1haWwnKSB8fCAnJykKLSAgICAg ICAgICAgICAgICApOworICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KCdzb3VyY2UnKSA9PSAnaW50 ZXJuYWwnKSB7CisgICAgICAgICAgICAgIGlmICh0aGlzLmlzTmV3KCkpIHsKKyAgICAgICAgICAg ICAgICAvLyBQYXNzd29yZCBpcyBjb21wdWxzb3J5IGZvciBuZXcgdXNlci4KKyAgICAgICAgICAg ICAgICBpZiAoJ25ld1Bhc3N3b3JkJyBpbiBjaGFuZ2VkQXR0cnMgJiYgKF8uaXNVbmRlZmluZWQo dGhpcy5nZXQoJ25ld1Bhc3N3b3JkJykpIHx8CisgICAgICAgICAgICAgICAgICAgIF8uaXNOdWxs KHRoaXMuZ2V0KCduZXdQYXNzd29yZCcpKSB8fAorICAgICAgICAgICAgICAgICAgICB0aGlzLmdl dCgnbmV3UGFzc3dvcmQnKSA9PSAnJykpIHsKIAotICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JN b2RlbC5zZXQoJ25ld1Bhc3N3b3JkJywgZXJybXNnKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g ZXJybXNnOwotICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuZ2V0 KCduZXdQYXNzd29yZCcpKSAmJgotICAgICAgICAgICAgICAgICFfLmlzTnVsbCh0aGlzLmdldCgn bmV3UGFzc3dvcmQnKSkgJiYKLSAgICAgICAgICAgICAgICB0aGlzLmdldCgnbmV3UGFzc3dvcmQn KS5sZW5ndGggPCA2KSB7CisgICAgICAgICAgICAgICAgICBlcnJtc2cgPSBnZXR0ZXh0KCdQYXNz d29yZCBjYW5ub3QgYmUgZW1wdHkgZm9yIHVzZXIgJXMuJywKKyAgICAgICAgICAgICAgICAgICAg KHRoaXMuZ2V0KCdlbWFpbCcpIHx8ICcnKQorICAgICAgICAgICAgICAgICAgKTsKIAotICAgICAg ICAgICAgICAgIGVycm1zZyA9IGdldHRleHQoJ1Bhc3N3b3JkIG11c3QgYmUgYXQgbGVhc3QgNiBj aGFyYWN0ZXJzIGZvciB1c2VyICVzLicsCi0gICAgICAgICAgICAgICAgICAodGhpcy5nZXQoJ2Vt YWlsJykgfHwgJycpCi0gICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgIHRoaXMu ZXJyb3JNb2RlbC5zZXQoJ25ld1Bhc3N3b3JkJywgZXJybXNnKTsKKyAgICAgICAgICAgICAgICAg IHJldHVybiBlcnJtc2c7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghXy5pc1VuZGVmaW5l ZCh0aGlzLmdldCgnbmV3UGFzc3dvcmQnKSkgJiYKKyAgICAgICAgICAgICAgICAgICFfLmlzTnVs bCh0aGlzLmdldCgnbmV3UGFzc3dvcmQnKSkgJiYKKyAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0 KCduZXdQYXNzd29yZCcpLmxlbmd0aCA8IDYpIHsKIAotICAgICAgICAgICAgICAgIHRoaXMuZXJy b3JNb2RlbC5zZXQoJ25ld1Bhc3N3b3JkJywgZXJybXNnKTsKLSAgICAgICAgICAgICAgICByZXR1 cm4gZXJybXNnOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMu ZXJyb3JNb2RlbC51bnNldCgnbmV3UGFzc3dvcmQnKTsKLSAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgZXJybXNnID0gZ2V0dGV4dCgnUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCA2 IGNoYXJhY3RlcnMgZm9yIHVzZXIgJXMuJywKKyAgICAgICAgICAgICAgICAgICAgKHRoaXMuZ2V0 KCdlbWFpbCcpIHx8ICcnKQorICAgICAgICAgICAgICAgICAgKTsKIAotICAgICAgICAgICAgICBp ZiAoJ2NvbmZpcm1QYXNzd29yZCcgaW4gY2hhbmdlZEF0dHJzICYmIChfLmlzVW5kZWZpbmVkKHRo aXMuZ2V0KCdjb25maXJtUGFzc3dvcmQnKSkgfHwKLSAgICAgICAgICAgICAgICAgIF8uaXNOdWxs KHRoaXMuZ2V0KCdjb25maXJtUGFzc3dvcmQnKSkgfHwKLSAgICAgICAgICAgICAgICAgIHRoaXMu Z2V0KCdjb25maXJtUGFzc3dvcmQnKSA9PSAnJykpIHsKKyAgICAgICAgICAgICAgICAgIHRoaXMu ZXJyb3JNb2RlbC5zZXQoJ25ld1Bhc3N3b3JkJywgZXJybXNnKTsKKyAgICAgICAgICAgICAgICAg IHJldHVybiBlcnJtc2c7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICAgIHRoaXMuZXJyb3JNb2RlbC51bnNldCgnbmV3UGFzc3dvcmQnKTsKKyAgICAgICAgICAgICAg ICB9CiAKLSAgICAgICAgICAgICAgICBlcnJtc2cgPSBnZXR0ZXh0KCdDb25maXJtIFBhc3N3b3Jk IGNhbm5vdCBiZSBlbXB0eSBmb3IgdXNlciAlcy4nLAotICAgICAgICAgICAgICAgICAgKHRoaXMu Z2V0KCdlbWFpbCcpIHx8ICcnKQotICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAg aWYgKCdjb25maXJtUGFzc3dvcmQnIGluIGNoYW5nZWRBdHRycyAmJiAoXy5pc1VuZGVmaW5lZCh0 aGlzLmdldCgnY29uZmlybVBhc3N3b3JkJykpIHx8CisgICAgICAgICAgICAgICAgICAgIF8uaXNO dWxsKHRoaXMuZ2V0KCdjb25maXJtUGFzc3dvcmQnKSkgfHwKKyAgICAgICAgICAgICAgICAgICAg dGhpcy5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpID09ICcnKSkgewogCi0gICAgICAgICAgICAgICAg dGhpcy5lcnJvck1vZGVsLnNldCgnY29uZmlybVBhc3N3b3JkJywgZXJybXNnKTsKLSAgICAgICAg ICAgICAgICByZXR1cm4gZXJybXNnOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAgIHRoaXMuZXJyb3JNb2RlbC51bnNldCgnY29uZmlybVBhc3N3b3JkJyk7Ci0gICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVycm1zZyA9IGdldHRleHQoJ0NvbmZpcm0gUGFz c3dvcmQgY2Fubm90IGJlIGVtcHR5IGZvciB1c2VyICVzLicsCisgICAgICAgICAgICAgICAgICAg ICh0aGlzLmdldCgnZW1haWwnKSB8fCAnJykKKyAgICAgICAgICAgICAgICAgICk7CiAKLSAgICAg ICAgICAgICAgaWYgKCEhdGhpcy5nZXQoJ25ld1Bhc3N3b3JkJykgJiYgISF0aGlzLmdldCgnY29u ZmlybVBhc3N3b3JkJykgJiYKLSAgICAgICAgICAgICAgICB0aGlzLmdldCgnbmV3UGFzc3dvcmQn KSAhPSB0aGlzLmdldCgnY29uZmlybVBhc3N3b3JkJykpIHsKKyAgICAgICAgICAgICAgICAgIHRo aXMuZXJyb3JNb2RlbC5zZXQoJ2NvbmZpcm1QYXNzd29yZCcsIGVycm1zZyk7CisgICAgICAgICAg ICAgICAgICByZXR1cm4gZXJybXNnOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICB0aGlzLmVycm9yTW9kZWwudW5zZXQoJ2NvbmZpcm1QYXNzd29yZCcpOworICAg ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGVycm1zZyA9IGdldHRleHQoJ1Bhc3N3 b3JkcyBkbyBub3QgbWF0Y2ggZm9yIHVzZXIgJXMuJywKLSAgICAgICAgICAgICAgICAgICh0aGlz LmdldCgnZW1haWwnKSB8fCAnJykKLSAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAg IGlmICghIXRoaXMuZ2V0KCduZXdQYXNzd29yZCcpICYmICEhdGhpcy5nZXQoJ2NvbmZpcm1QYXNz d29yZCcpICYmCisgICAgICAgICAgICAgICAgICB0aGlzLmdldCgnbmV3UGFzc3dvcmQnKSAhPSB0 aGlzLmdldCgnY29uZmlybVBhc3N3b3JkJykpIHsKIAotICAgICAgICAgICAgICAgIHRoaXMuZXJy b3JNb2RlbC5zZXQoJ2NvbmZpcm1QYXNzd29yZCcsIGVycm1zZyk7Ci0gICAgICAgICAgICAgICAg cmV0dXJuIGVycm1zZzsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0 aGlzLmVycm9yTW9kZWwudW5zZXQoJ2NvbmZpcm1QYXNzd29yZCcpOwotICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICBlcnJtc2cgPSBnZXR0ZXh0KCdQYXNzd29yZHMgZG8gbm90IG1h dGNoIGZvciB1c2VyICVzLicsCisgICAgICAgICAgICAgICAgICAgICh0aGlzLmdldCgnZW1haWwn KSB8fCAnJykKKyAgICAgICAgICAgICAgICAgICk7CiAKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgIGlmICgoXy5pc1VuZGVmaW5lZCh0aGlzLmdldCgnbmV3UGFzc3dvcmQnKSkg fHwgXy5pc051bGwodGhpcy5nZXQoJ25ld1Bhc3N3b3JkJykpIHx8Ci0gICAgICAgICAgICAgICAg ICB0aGlzLmdldCgnbmV3UGFzc3dvcmQnKSA9PSAnJykgJiYKLSAgICAgICAgICAgICAgICAoKF8u aXNVbmRlZmluZWQodGhpcy5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpKSB8fCBfLmlzTnVsbCh0aGlz LmdldCgnY29uZmlybVBhc3N3b3JkJykpIHx8Ci0gICAgICAgICAgICAgICAgICB0aGlzLmdldCgn Y29uZmlybVBhc3N3b3JkJykgPT0gJycpKSkgewotCi0gICAgICAgICAgICAgICAgdGhpcy5lcnJv ck1vZGVsLnVuc2V0KCduZXdQYXNzd29yZCcpOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLmdl dCgnbmV3UGFzc3dvcmQnKSA9PSAnJykgewotICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoewot ICAgICAgICAgICAgICAgICAgICAnbmV3UGFzc3dvcmQnOiB1bmRlZmluZWQsCi0gICAgICAgICAg ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC5zZXQoJ2NvbmZp cm1QYXNzd29yZCcsIGVycm1zZyk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJybXNnOwor ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yTW9k ZWwudW5zZXQoJ2NvbmZpcm1QYXNzd29yZCcpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAg ICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC51bnNldCgnY29uZmlybVBhc3N3b3JkJyk7Ci0gICAg ICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KCdjb25maXJtUGFzc3dvcmQnKSA9PSAnJykgewotICAg ICAgICAgICAgICAgICAgdGhpcy5zZXQoewotICAgICAgICAgICAgICAgICAgICAnY29uZmlybVBh c3N3b3JkJzogdW5kZWZpbmVkLAotICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuZ2V0KCdu ZXdQYXNzd29yZCcpKSAmJgotICAgICAgICAgICAgICAgICFfLmlzTnVsbCh0aGlzLmdldCgnbmV3 UGFzc3dvcmQnKSkgJiYKLSAgICAgICAgICAgICAgICAhdGhpcy5nZXQoJ25ld1Bhc3N3b3JkJykg PT0gJycgJiYKLSAgICAgICAgICAgICAgICB0aGlzLmdldCgnbmV3UGFzc3dvcmQnKS5sZW5ndGgg PCA2KSB7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKChfLmlz VW5kZWZpbmVkKHRoaXMuZ2V0KCduZXdQYXNzd29yZCcpKSB8fCBfLmlzTnVsbCh0aGlzLmdldCgn bmV3UGFzc3dvcmQnKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXQoJ25ld1Bhc3N3 b3JkJykgPT0gJycpICYmCisgICAgICAgICAgICAgICAgICAoKF8uaXNVbmRlZmluZWQodGhpcy5n ZXQoJ2NvbmZpcm1QYXNzd29yZCcpKSB8fCBfLmlzTnVsbCh0aGlzLmdldCgnY29uZmlybVBhc3N3 b3JkJykpIHx8CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0KCdjb25maXJtUGFzc3dvcmQn KSA9PSAnJykpKSB7CisKKyAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC51bnNldCgn bmV3UGFzc3dvcmQnKTsKKyAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldCgnbmV3UGFzc3dv cmQnKSA9PSAnJykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCh7CisgICAgICAgICAg ICAgICAgICAgICAgJ25ld1Bhc3N3b3JkJzogdW5kZWZpbmVkLAorICAgICAgICAgICAgICAgICAg ICB9KTsKKyAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGVycm1zZyA9IGdl dHRleHQoJ1Bhc3N3b3JkIG11c3QgYmUgYXQgbGVhc3QgNiBjaGFyYWN0ZXJzIGZvciB1c2VyICVz LicsCi0gICAgICAgICAgICAgICAgICAodGhpcy5nZXQoJ2VtYWlsJykgfHwgJycpCi0gICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC51bnNldCgnY29u ZmlybVBhc3N3b3JkJyk7CisgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXQoJ2NvbmZpcm1Q YXNzd29yZCcpID09ICcnKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KHsKKyAgICAg ICAgICAgICAgICAgICAgICAnY29uZmlybVBhc3N3b3JkJzogdW5kZWZpbmVkLAorICAgICAgICAg ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVs c2UgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuZ2V0KCduZXdQYXNzd29yZCcpKSAmJgorICAgICAg ICAgICAgICAgICAgIV8uaXNOdWxsKHRoaXMuZ2V0KCduZXdQYXNzd29yZCcpKSAmJgorICAgICAg ICAgICAgICAgICAgIXRoaXMuZ2V0KCduZXdQYXNzd29yZCcpID09ICcnICYmCisgICAgICAgICAg ICAgICAgICB0aGlzLmdldCgnbmV3UGFzc3dvcmQnKS5sZW5ndGggPCA2KSB7CiAKLSAgICAgICAg ICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCduZXdQYXNzd29yZCcsIGVycm1zZyk7Ci0gICAg ICAgICAgICAgICAgcmV0dXJuIGVycm1zZzsKLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChfLmlz VW5kZWZpbmVkKHRoaXMuZ2V0KCdjb25maXJtUGFzc3dvcmQnKSkgfHwKLSAgICAgICAgICAgICAg ICBfLmlzTnVsbCh0aGlzLmdldCgnY29uZmlybVBhc3N3b3JkJykpIHx8Ci0gICAgICAgICAgICAg ICAgdGhpcy5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpID09ICcnKSB7CisgICAgICAgICAgICAgICAg ICBlcnJtc2cgPSBnZXR0ZXh0KCdQYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0IDYgY2hhcmFjdGVy cyBmb3IgdXNlciAlcy4nLAorICAgICAgICAgICAgICAgICAgICAodGhpcy5nZXQoJ2VtYWlsJykg fHwgJycpCisgICAgICAgICAgICAgICAgICApOwogCi0gICAgICAgICAgICAgICAgZXJybXNnID0g Z2V0dGV4dCgnQ29uZmlybSBQYXNzd29yZCBjYW5ub3QgYmUgZW1wdHkgZm9yIHVzZXIgJXMuJywK LSAgICAgICAgICAgICAgICAgICh0aGlzLmdldCgnZW1haWwnKSB8fCAnJykKLSAgICAgICAgICAg ICAgICApOworICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgnbmV3UGFzc3dv cmQnLCBlcnJtc2cpOworICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm1zZzsKKyAgICAgICAg ICAgICAgICB9IGVsc2UgaWYgKF8uaXNVbmRlZmluZWQodGhpcy5nZXQoJ2NvbmZpcm1QYXNzd29y ZCcpKSB8fAorICAgICAgICAgICAgICAgICAgXy5pc051bGwodGhpcy5nZXQoJ2NvbmZpcm1QYXNz d29yZCcpKSB8fAorICAgICAgICAgICAgICAgICAgdGhpcy5nZXQoJ2NvbmZpcm1QYXNzd29yZCcp ID09ICcnKSB7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCdjb25maXJt UGFzc3dvcmQnLCBlcnJtc2cpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnJtc2c7Ci0gICAg ICAgICAgICAgIH0gZWxzZSBpZiAoISF0aGlzLmdldCgnbmV3UGFzc3dvcmQnKSAmJiAhIXRoaXMu Z2V0KCdjb25maXJtUGFzc3dvcmQnKSAmJgotICAgICAgICAgICAgICAgIHRoaXMuZ2V0KCduZXdQ YXNzd29yZCcpICE9IHRoaXMuZ2V0KCdjb25maXJtUGFzc3dvcmQnKSkgeworICAgICAgICAgICAg ICAgICAgZXJybXNnID0gZ2V0dGV4dCgnQ29uZmlybSBQYXNzd29yZCBjYW5ub3QgYmUgZW1wdHkg Zm9yIHVzZXIgJXMuJywKKyAgICAgICAgICAgICAgICAgICAgKHRoaXMuZ2V0KCdlbWFpbCcpIHx8 ICcnKQorICAgICAgICAgICAgICAgICAgKTsKIAotICAgICAgICAgICAgICAgIGVycm1zZyA9IGdl dHRleHQoJ1Bhc3N3b3JkcyBkbyBub3QgbWF0Y2ggZm9yIHVzZXIgJXMuJywKLSAgICAgICAgICAg ICAgICAgICh0aGlzLmdldCgnZW1haWwnKSB8fCAnJykKLSAgICAgICAgICAgICAgICApOworICAg ICAgICAgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgnY29uZmlybVBhc3N3b3JkJywgZXJy bXNnKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJtc2c7CisgICAgICAgICAgICAgICAg fSBlbHNlIGlmICghIXRoaXMuZ2V0KCduZXdQYXNzd29yZCcpICYmICEhdGhpcy5nZXQoJ2NvbmZp cm1QYXNzd29yZCcpICYmCisgICAgICAgICAgICAgICAgICB0aGlzLmdldCgnbmV3UGFzc3dvcmQn KSAhPSB0aGlzLmdldCgnY29uZmlybVBhc3N3b3JkJykpIHsKIAotICAgICAgICAgICAgICAgIHRo aXMuZXJyb3JNb2RlbC5zZXQoJ2NvbmZpcm1QYXNzd29yZCcsIGVycm1zZyk7Ci0gICAgICAgICAg ICAgICAgcmV0dXJuIGVycm1zZzsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICB0aGlzLmVycm9yTW9kZWwudW5zZXQoJ25ld1Bhc3N3b3JkJyk7Ci0gICAgICAgICAgICAg ICAgdGhpcy5lcnJvck1vZGVsLnVuc2V0KCdjb25maXJtUGFzc3dvcmQnKTsKKyAgICAgICAgICAg ICAgICAgIGVycm1zZyA9IGdldHRleHQoJ1Bhc3N3b3JkcyBkbyBub3QgbWF0Y2ggZm9yIHVzZXIg JXMuJywKKyAgICAgICAgICAgICAgICAgICAgKHRoaXMuZ2V0KCdlbWFpbCcpIHx8ICcnKQorICAg ICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNl dCgnY29uZmlybVBhc3N3b3JkJywgZXJybXNnKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBl cnJtc2c7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIHRoaXMu ZXJyb3JNb2RlbC51bnNldCgnbmV3UGFzc3dvcmQnKTsKKyAgICAgICAgICAgICAgICAgIHRoaXMu ZXJyb3JNb2RlbC51bnNldCgnY29uZmlybVBhc3N3b3JkJyk7CisgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsK QEAgLTcxNiw3ICs4MDksMTAgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgICAgIHNhdmVVc2Vy OiBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gbS50b0pTT04odHJ1 ZSk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG0uaXNOZXcoKSAmJiAoIW0uZ2V0KCdlbWFp bCcpIHx8ICFtLmdldCgncm9sZScpIHx8CisgICAgICAgICAgICAgICAgICAgIGlmKG0uaXNOZXco KSAmJiBtLmdldCgnYXV0aE9ubHlJbnRlcm5hbCcpID09PSBmYWxzZSAmJgorICAgICAgICAgICAg ICAgICAgICAgKCFtLmdldCgndXNlcm5hbWUnKSB8fCAhbS5nZXQoJ3NvdXJjZScpIHx8ICFtLmdl dCgncm9sZScpKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobS5pc05ldygpICYmIG0uZ2V0KCdhdXRoT25seUlu dGVybmFsJykgPT09IHRydWUgJiYgICghbS5nZXQoJ2VtYWlsJykgfHwgIW0uZ2V0KCdyb2xlJykg fHwKICAgICAgICAgICAgICAgICAgICAgICAgICFtLmdldCgnbmV3UGFzc3dvcmQnKSB8fCAhbS5n ZXQoJ2NvbmZpcm1QYXNzd29yZCcpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICBtLmdldCgn bmV3UGFzc3dvcmQnKSAhPSBtLmdldCgnY29uZmlybVBhc3N3b3JkJykpKSB7CiAgICAgICAgICAg ICAgICAgICAgICAgLy8gTmV3IHVzZXIgbW9kZWwgaXMgdmFsaWQgYnV0IHBhcnRpYWxseSBmaWxs ZWQgc28gcmV0dXJuIHdpdGhvdXQgc2F2aW5nLgpAQCAtNzQxLDcgKzgzNyw3IEBAIGRlZmluZShb CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5zdGFydE5ld1Nlc3Npb24oKTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgYWxlcnRpZnkuc3VjY2VzcyhnZXR0ZXh0KCdVc2VyIFwnJXNc JyBzYXZlZC4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uZ2V0KCdlbWFpbCcpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5nZXQoJ3VzZXJuYW1lJykKICAgICAgICAgICAg ICAgICAgICAgICAgICAgKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAg ICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKHJlcywganF4aHIpIHsKQEAgLTc5Nyw2ICs4 OTMsMjMgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7CiAgICAgICAgICAg ICAgICAgfSk7CiAKKyAgICAgICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgICAgICB1cmw6 IFNPVVJDRVVSTCwKKyAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLAorICAgICAgICAgICAg ICAgIGFzeW5jOiBmYWxzZSwKKyAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAuZG9u ZShmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgICAgICAgIFNvdXJjZXMgPSByZXM7CisgICAg ICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAuZmFpbChmdW5jdGlvbigpIHsKKyAgICAg ICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAg IGFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAgICAgICAgIGdldHRleHQoJ0Vycm9yJyks CisgICAgICAgICAgICAgICAgICAgICAgZ2V0dGV4dCgnQ2Fubm90IGxvYWQgdXNlciBTb3VyY2Vz LicpCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICB9LCAxMDApOwor ICAgICAgICAgICAgICAgIH0pOworCiAgICAgICAgICAgICAgIHZhciB2aWV3ID0gdGhpcy52aWV3 ID0gbmV3IEJhY2tncmlkLkdyaWQoewogICAgICAgICAgICAgICAgIHJvdzogVXNlclJvdywKICAg ICAgICAgICAgICAgICBjb2x1bW5zOiBncmlkU2NoZW1hLmNvbHVtbnMsCmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi90b29scy91c2VyX21hbmFnZW1lbnQvdGVtcGxhdGVzL3VzZXJfbWFuYWdlbWVu dC9qcy9jdXJyZW50X3VzZXIuanMgYi93ZWIvcGdhZG1pbi90b29scy91c2VyX21hbmFnZW1lbnQv dGVtcGxhdGVzL3VzZXJfbWFuYWdlbWVudC9qcy9jdXJyZW50X3VzZXIuanMKaW5kZXggY2ZjYjc3 ODEzLi5jNmUyMTAzNDMgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL3VzZXJfbWFuYWdl bWVudC90ZW1wbGF0ZXMvdXNlcl9tYW5hZ2VtZW50L2pzL2N1cnJlbnRfdXNlci5qcworKysgYi93 ZWIvcGdhZG1pbi90b29scy91c2VyX21hbmFnZW1lbnQvdGVtcGxhdGVzL3VzZXJfbWFuYWdlbWVu dC9qcy9jdXJyZW50X3VzZXIuanMKQEAgLTE0LDYgKzE0LDcgQEAgZGVmaW5lKCdwZ2FkbWluLnVz ZXJfbWFuYWdlbWVudC5jdXJyZW50X3VzZXInLCBbXSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICdp c19hZG1pbic6IHt7IGlzX2FkbWluIH19LAogICAgICAgICAnbmFtZSc6ICd7eyBuYW1lIH19JywK ICAgICAgICAgJ2FsbG93X3NhdmVfcGFzc3dvcmQnOiB7eyBhbGxvd19zYXZlX3Bhc3N3b3JkIH19 LAotICAgICAgICAnYWxsb3dfc2F2ZV90dW5uZWxfcGFzc3dvcmQnOiB7eyBhbGxvd19zYXZlX3R1 bm5lbF9wYXNzd29yZCB9fQorICAgICAgICAnYWxsb3dfc2F2ZV90dW5uZWxfcGFzc3dvcmQnOiB7 eyBhbGxvd19zYXZlX3R1bm5lbF9wYXNzd29yZCB9fSwKKyAgICAgICAgJ2F1dGhfc291cmNlcyc6 IHt7IGF1dGhfc291cmNlcyB9fQogICAgIH0KIH0pOwpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Np b24vcHl0aG9uX3Rlc3RfdXRpbHMvY3NyZl90ZXN0X2NsaWVudC5weSBiL3dlYi9yZWdyZXNzaW9u L3B5dGhvbl90ZXN0X3V0aWxzL2NzcmZfdGVzdF9jbGllbnQucHkKaW5kZXggYmIzZjdkYTcwLi40 MmFlNTEwYjUgMTAwNjQ0Ci0tLSBhL3dlYi9yZWdyZXNzaW9uL3B5dGhvbl90ZXN0X3V0aWxzL2Nz cmZfdGVzdF9jbGllbnQucHkKKysrIGIvd2ViL3JlZ3Jlc3Npb24vcHl0aG9uX3Rlc3RfdXRpbHMv Y3NyZl90ZXN0X2NsaWVudC5weQpAQCAtMTA5LDcgKzEwOSw3IEBAIGNsYXNzIFRlc3RDbGllbnQo dGVzdGluZy5GbGFza0NsaWVudCk6CiAgICAgICAgICAgICBjc3JmX3Rva2VuID0gc2VsZi5nZW5l cmF0ZV9jc3JmX3Rva2VuKCkKIAogICAgICAgICByZXMgPSBzZWxmLnBvc3QoCi0gICAgICAgICAg ICAnL2xvZ2luJywgZGF0YT1kaWN0KAorICAgICAgICAgICAgJy9hdXRoZW50aWNhdGUvbG9naW4n LCBkYXRhPWRpY3QoCiAgICAgICAgICAgICAgICAgZW1haWw9ZW1haWwsIHBhc3N3b3JkPXBhc3N3 b3JkLAogICAgICAgICAgICAgICAgIGNzcmZfdG9rZW49Y3NyZl90b2tlbiwKICAgICAgICAgICAg ICksCkBAIC0xMjAsNSArMTIwLDUgQEAgY2xhc3MgVGVzdENsaWVudCh0ZXN0aW5nLkZsYXNrQ2xp ZW50KToKICAgICAgICAgcmV0dXJuIHJlcwogCiAgICAgZGVmIGxvZ291dChzZWxmKToKLSAgICAg ICAgcmVzID0gc2VsZi5nZXQoJy9sb2dvdXQnLCBmb2xsb3dfcmVkaXJlY3RzPUZhbHNlKQorICAg ICAgICByZXMgPSBzZWxmLmdldCgnL2xvZ291dD9uZXh0PS9icm93c2VyLycsIGZvbGxvd19yZWRp cmVjdHM9RmFsc2UpCiAgICAgICAgIHNlbGYuY3NyZl90b2tlbiA9IE5vbmUKZGlmZiAtLWdpdCBh L3dlYi9yZWdyZXNzaW9uL3J1bnRlc3RzLnB5IGIvd2ViL3JlZ3Jlc3Npb24vcnVudGVzdHMucHkK aW5kZXggZWY1YjQ2MzI4Li5mY2Y3M2E4ODYgMTAwNjQ0Ci0tLSBhL3dlYi9yZWdyZXNzaW9uL3J1 bnRlc3RzLnB5CisrKyBiL3dlYi9yZWdyZXNzaW9uL3J1bnRlc3RzLnB5CkBAIC0xMTgsNiArMTE4 LDExIEBAIGFwcC5QR0FETUlOX1JVTlRJTUUgPSBUcnVlCiBpZiBjb25maWcuU0VSVkVSX01PREUg aXMgVHJ1ZToKICAgICBhcHAuUEdBRE1JTl9SVU5USU1FID0gRmFsc2UKIGFwcC5jb25maWdbJ1dU Rl9DU1JGX0VOQUJMRUQnXSA9IFRydWUKKworIyBBdXRoZW50aWNhdGlvbiBzb3VyY2VzCithcHAu UEdBRE1JTl9ERUZBVUxUX0FVVEhfU09VUkNFID0gJ2ludGVybmFsJworYXBwLlBHQURNSU5fRVhU RVJOQUxfQVVUSF9TT1VSQ0UgPSAnbGRhcCcKKwogYXBwLnRlc3RfY2xpZW50X2NsYXNzID0gVGVz dENsaWVudAogdGVzdF9jbGllbnQgPSBhcHAudGVzdF9jbGllbnQoKQogdGVzdF9jbGllbnQuc2V0 QXBwKGFwcCkKQEAgLTE5NSw2ICsyMDAsOCBAQCBkZWYgZ2V0X3Rlc3RfbW9kdWxlcyhhcmd1bWVu dHMpOgogICAgICAgICAgICAgImJyb3dzZXIudGVzdHMudGVzdF9sb2dpbiIsCiAgICAgICAgICAg ICAiYnJvd3Nlci50ZXN0cy50ZXN0X2xvZ291dCIsCiAgICAgICAgICAgICAiYnJvd3Nlci50ZXN0 cy50ZXN0X3Jlc2V0X3Bhc3N3b3JkIiwKKyAgICAgICAgICAgICJicm93c2VyLnRlc3RzLnRlc3Rf bGRhcF9sb2dpbiIsCisgICAgICAgICAgICAiYnJvd3Nlci50ZXN0cy50ZXN0X2xkYXBfd2l0aF9t b2NraW5nIiwKICAgICAgICAgXSkKICAgICBpZiBhcmd1bWVudHNbJ2V4Y2x1ZGUnXSBpcyBub3Qg Tm9uZToKICAgICAgICAgZXhjbHVkZV9wa2dzICs9IGFyZ3VtZW50c1snZXhjbHVkZSddLnNwbGl0 KCcsJykKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL3Rlc3RfY29uZmlnLmpzb24uaW4gYi93 ZWIvcmVncmVzc2lvbi90ZXN0X2NvbmZpZy5qc29uLmluCmluZGV4IDE1YjEzM2ExOS4uMGExNTFl NjMzIDEwMDY0NAotLS0gYS93ZWIvcmVncmVzc2lvbi90ZXN0X2NvbmZpZy5qc29uLmluCisrKyBi L3dlYi9yZWdyZXNzaW9uL3Rlc3RfY29uZmlnLmpzb24uaW4KQEAgLTExLDYgKzExLDQ5IEBACiAg ICAgImxvZ2luX3Bhc3N3b3JkIjogIlBBU1NXT1JEIiwKICAgICAibG9naW5fdXNlcm5hbWUiOiAi VVNFUkBFWEFNUExFLkNPTSIKICAgfSwKKyAgInBnQWRtaW40X2xkYXBfY3JlZGVudGlhbHMiOiB7 CisgICAgImxvZ2luX3Bhc3N3b3JkIjogIlBBU1NXT1JEIiwKKyAgICAibG9naW5fdXNlcm5hbWUi OiAiVVNFUk5BTUUiCisgIH0sCisgICJsZGFwX2NvbmZpZyI6IFsKKyAgICB7CisgICAgImxkYXAi OiB7CisgICAgICAibmFtZSI6ICJMZGFwIHNjZW5hcmlvIG5hbWUiCisgICAgICAidXJpIjogImxk YXA6Ly9JUC1BRERSRVNTL0hPU1ROQU1FOjM4OSIsCisgICAgICAiYmFzZV9kbiI6ICJCQVNFLURO IiwKKyAgICAgICJzZWFyY2hfYmFzZV9kbiI6ICJTRUFSQ0gtQkFTRS1ETiIsCisgICAgICAidXNl cm5hbWVfYXRyIjogIlVJRCIsCisgICAgICAic2VhcmNoX2ZpbHRlciI6ICIob2JqZWN0Y2xhc3M9 KikiLAorICAgICAgInVzZV9zdGFydHRscyI6IGZhbHNlLAorICAgICAgImNhX2NlcnRfZmlsZSI6 ICIiLAorICAgICAgImNlcnRfZmlsZSI6ICIiLAorICAgICAgImtleV9maWxlIjogIiIKKyAgICB9 LAorICAgICJsZGFwX3dpdGhfc3NsIjogeworICAgICAgIm5hbWUiOiAiTGRhcCBzY2VuYXJpbyBu YW1lIgorICAgICAgInVyaSI6ICJsZGFwczovL0lQLUFERFJFU1MvSE9TVE5BTUU6NjM2IiwKKyAg ICAgICJiYXNlX2RuIjogIkJBU0UtRE4iLAorICAgICAgInNlYXJjaF9iYXNlX2RuIjogIlNFQVJD SC1CQVNFLUROIiwKKyAgICAgICJ1c2VybmFtZV9hdHIiOiAiVUlEIiwKKyAgICAgICJzZWFyY2hf ZmlsdGVyIjogIihvYmplY3RjbGFzcz0qKSIsCisgICAgICAidXNlX3N0YXJ0dGxzIjogZmFsc2Us CisgICAgICAiY2FfY2VydF9maWxlIjogIiIsCisgICAgICAiY2VydF9maWxlIjogIiIsCisgICAg ICAia2V5X2ZpbGUiOiAiIgorICAgIH0sCisgICAgImxkYXBfd2l0aF90bHMiOiB7CisgICAgICAi bmFtZSI6ICJMZGFwIHNjZW5hcmlvIG5hbWUiCisgICAgICAidXJpIjogImxkYXA6Ly9JUC1BRERS RVNTL0hPU1ROQU1FOjM4OSIsCisgICAgICAiYmFzZV9kbiI6ICJCQVNFLUROIiwKKyAgICAgICJz ZWFyY2hfYmFzZV9kbiI6ICJTRUFSQ0gtQkFTRS1ETiIsCisgICAgICAidXNlcm5hbWVfYXRyIjog IlVJRCIsCisgICAgICAic2VhcmNoX2ZpbHRlciI6ICIob2JqZWN0Y2xhc3M9KikiLAorICAgICAg InVzZV9zdGFydHRscyI6IHRydWUsCisgICAgICAiY2FfY2VydF9maWxlIjogIiIsCisgICAgICAi Y2VydF9maWxlIjogIiIsCisgICAgICAia2V5X2ZpbGUiOiAiIgorICAgIH0KKyAgfV0sCiAgICJz ZXJ2ZXJfZ3JvdXAiOiAxLAogICAic2VydmVyX2NyZWRlbnRpYWxzIjogWwogICAgIHsK --00000000000000beb405a24ab456--