Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f3e16-0004un-KC for pgadmin-hackers@arkaria.postgresql.org; Wed, 04 Apr 2018 08:43:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f3e15-0001rs-BU for pgadmin-hackers@arkaria.postgresql.org; Wed, 04 Apr 2018 08:43:39 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f3e14-0001ri-U6 for pgadmin-hackers@lists.postgresql.org; Wed, 04 Apr 2018 08:43:39 +0000 Received: from mail-ot0-x231.google.com ([2607:f8b0:4003:c0f::231]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1f3e0z-0008GA-OM for pgadmin-hackers@postgresql.org; Wed, 04 Apr 2018 08:43:38 +0000 Received: by mail-ot0-x231.google.com with SMTP id m7-v6so22508102otd.1 for ; Wed, 04 Apr 2018 01:43:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=noMDuotCNO6Wu59W5ocywLesQ9jqJXTPAfA8z0m7dmI=; b=GB7bz10E/s/zj7rqEsEUqkUidsoQI9y8fuy6rf0X5QJ4DgHc+QarCZirI8wG6GCohi KvA/JVaCRJzfWN9kZevDaSv9LFNCuMFNMXG3MnpPvkm63PmXAk1z6s1mjmsVemURZxLG W/RpUWrtafHyTSEuaJPOJ2Aa5OkZgganOuQzHBIYgVW2TxGccr9eaRavWZqcy+9m7y9P NoAZALh/YVGEgZiEFkmpVQ3YW7SJRNaiCDd2zMafyDeY9WFccuoF6JWQbSshIt6gqtp1 ZHKRmzvB4ZVX2QFoxsMT32DXQICplqOLHfyf967GBbWnuk2KlBvYnfi4+2PPjbfc0a+2 dQOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=noMDuotCNO6Wu59W5ocywLesQ9jqJXTPAfA8z0m7dmI=; b=A+tFS5jMr2/O2XWPtt6Fx2xrwyCGFvEg0MZhtPe6mlIA3lfAwIJV4fZIDMUleKwiqY rH1FNUwQjc+T7bQDvdeUZCWd6X2b7GpYUW+o4Id2cM+fMS0YP+698QLxXWhFsvuVHMwC DDPMCkRxNgthMFYlp8CDtUzsa1PLWSYTSvLw5cvA/pXOb76b6jID3WFko5EwwJsM9xZh 14MV9c+OEGm63oabhY3RiDorrCGA8gaYkNkbMmsL8WZ7aHnVpHcEC0o+YhcVRGxoBtW9 r4GPfOFMYNCSsN4Cd7290QCamfYlPMcp9XGq4P4/wA35FzAuyIM3UX3eY5ITsBE+CbiI yIfg== X-Gm-Message-State: AElRT7GqiYMZjiRrLoUD1nKnC/TGpZUpkv8AuOE62TFgHI8oSSG+4IUF l6BNSSxCQVur5yKHBKmk7r83ru6zQfu2s23fxW7eyg== X-Google-Smtp-Source: AIpwx4/4BelRvXNKJkBbI0MUJuz6pNY8b3UNG6aBBzJiVBEceS54H6IzsXGc7qfQV5GvBQ9SlY9GXumRog/c59YFdKs= X-Received: by 2002:a9d:7308:: with SMTP id e8-v6mr10822708otk.271.1522831411332; Wed, 04 Apr 2018 01:43:31 -0700 (PDT) MIME-Version: 1.0 Received: by 10.138.6.138 with HTTP; Wed, 4 Apr 2018 01:43:10 -0700 (PDT) In-Reply-To: References: From: Murtuza Zabuawala Date: Wed, 4 Apr 2018 14:13:10 +0530 Message-ID: Subject: Re: [pgAdmin4][RM#3235] Code refactoring in Query tool To: Joao De Almeida Pereira Cc: Dave Page , pgadmin-hackers Content-Type: multipart/mixed; boundary="00000000000053b7a5056901d1b9" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --00000000000053b7a5056901d1b9 Content-Type: multipart/alternative; boundary="00000000000053b7a1056901d1b7" --00000000000053b7a1056901d1b7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Thank you Victoria & Joao for reviewing. PFA updated patch. On Wed, Apr 4, 2018 at 12:26 AM, Joao De Almeida Pereira < jdealmeidapereira@pivotal.io> wrote: > Hi Murtuza > > It is really good to see other patches that are just refactoring code. > > We have some suggestions: > - We are trying to use =3D=3D=3D instead of =3D=3D because =3D=3D=3D ensu= re that the type > is also checked (https://developer.mozilla.org/en-US/docs/Web/JavaScript/ > Equality_comparisons_and_sameness) > =E2=80=8BDone=E2=80=8B - Now that we are refactoring some code, maybe we should keep some > consistency on the way we name functions and variables. > We should use camelCase for names instead of snake_case. In general, if you > see a function or variable name that doesn't fit the desired syntax or if= a > block of code seems confusing, it is better to refactor it. > Done=E2=80=8B, I have also changed other variables.=E2=80=8B BTW I'm using camelCase convention from last few patches :) - By the name of the function is_new_transaction_required, it describes > what the function represents but doesn't seem to explain the full scope o= f > the function. What do you think about the name: httpResponseRequiresNewT > ransaction > =E2=80=8BDone=E2=80=8B - The extraction doesn't look like it matches the code removed > > - if (pgAdmin.Browser.UserManagement.is_pga_login_required(e)) > { > - self.save_state('_explain_timing', []); > - return pgAdmin.Browser.UserManagement.pga_login(); > - } > - > - if(transaction.is_new_transaction_required(e)) { > - self.save_state('_explain_timing', []); > - return self.init_transaction(); > - } > - > - alertify.alert(gettext('Explain options error'), > - gettext('Error occurred while setting timing option in > explain.') > + let msg =3D httpErrorHandler.handleQueryToolAjaxError( > + pgAdmin, self, e, '_explain_timing', null, true > ); > + alertify.alert(gettext('Explain options error'), msg); > In this case we are only saving state if the following conditions are > true: > isNotConnectedToThePythonServer and httpResponseJSONIsPresent and > connectionLostToPostgresDatabase and shouldSaveState > That is not the case on the removed code. > =E2=80=8BI think the *null* value got your attention b ut actually I have a check in =E2=80=8B*handleQueryToolAjaxError *which wil= l make it array [] with respect to arguments for the state to save, Anyways I have also changed it to pass [] instead of null for better clarity. We have all those checks in our function so it check for those condition and save the state only if those returns True. - The functions extracted when are called do not use all the parameters. > This tells us that the function groups too much functionality that is not > used in same cases. Maybe we should split this function into smaller > functions that do each part. > =E2=80=8BWe already had split up the function in two part. =E2=80=8B > > > Thanks > Victoria & Joao > > On Tue, Apr 3, 2018 at 11:38 AM Murtuza Zabuawala enterprisedb.com> wrote: > >> Hi Dave, >> >> PFA updated patch, I've renamed it to query_tool_http_error_handler.js >> & query_tool_http_error_handler_spec.js respectively. >> >> -- >> Regards, >> Murtuza Zabuawala >> EnterpriseDB: http://www.enterprisedb.com >> The Enterprise PostgreSQL Company >> >> >> On Tue, Apr 3, 2018 at 7:43 PM, Dave Page wrote: >> >>> HI >>> >>> On Tue, Apr 3, 2018 at 12:27 PM, Murtuza Zabuawala >> enterprisedb.com> wrote: >>> >>>> Hi, >>>> >>>> PFA patch to extract the common code from query tool to handle ajax >>>> errors & connection handling, Also added unit tests around extracted c= ode. >>>> >>> >>> Looks good to me, except, I wonder if we should rename >>> is_new_transaction_required.js/is_new_transaction_required_spec.js to >>> something a little more generic; maybe conn_tx_handler_funcs.js? Not su= re I >>> like that though. >>> >>> >>> -- >>> Dave Page >>> Blog: http://pgsnake.blogspot.com >>> Twitter: @pgsnake >>> >>> EnterpriseDB UK: http://www.enterprisedb.com >>> The Enterprise PostgreSQL Company >>> >> >> --00000000000053b7a1056901d1b7 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

Thank you Victoria & Joao for reviewing.
PFA = updated patch.

On Wed, Apr 4, 2018 at 12:26 AM, Joao De Alm= eida Pereira <jdealmeidapereira@pivotal.io> wrote= :
Hi = Murtuza

It is really good to see other patches that are = just refactoring code.

We have some suggestions:
- We are trying to use =3D=3D=3D instead of =3D=3D because =3D=3D= =3D ensure that the type is also checked (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness)
=E2=80=8BDone=E2=80=8B
=C2=A0

- Now that we are refactoring some code, maybe we should keep some = consistency on the way we name functions and variables.=C2=A0
We should use camelCase for names instead of snake_case. In general,= if you see a function or variable name that doesn't fit the desired sy= ntax or if a block of code seems confusing, it is better to refactor it.
Done=E2=80=8B, I have also changed other variables.=E2=80= =8B
BTW I'm using camelCa= se convention from last few patches :)

- By the name of the function=C2=A0is_new_transaction_required, i= t describes what the function represents but doesn't seem to explain th= e full scope of the function. What do you think about the name:=C2=A0httpResponseRequiresNewTra= nsaction=C2=A0=C2=A0
=E2=80=8BDone=E2=80=8B
=C2=A0

- The extra= ction doesn't look like it matches the code removed=C2=A0

-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (= pgAdmin.Browser.UserManagement.is_pga_login_required(e)) {
<= div>-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 self.save_state('= _explain_timing', []);
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 return pgAdmin.Browser.UserManagement.pga_login();
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }
-
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if(transaction.is_new_tran= saction_required(e)) {
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 self.save_state('_explain_timing', []);
-=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return self.init_transaction(= );
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }
-
=
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 alertify.alert(gettext('= ;Explain options error'),
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 gettext('Error occurred while setting timing optio= n in explain.')
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 le= t msg =3D httpErrorHandler.handleQueryToolAjaxError(
+=C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 pgAdmin, self, e, '_explain_= timing', null, true
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 alertify.ale= rt(gettext('Explain options error'), msg);
In = this case we are only saving state if the following conditions are true:=C2= =A0
isNotConnectedToThePythonServer and httpResponseJSONIsPr= esent and connectionLostToPostgresDatabase and shouldSaveState
That is not the case on the removed code.
<= div class=3D"gmail_default" style=3D"font-family:verdana,sans-serif;color:r= gb(68,68,68);display:inline">=E2=80=8BI think the null value got you= r attention b
ut actually I have a check in =E2=80=8BhandleQueryToolAjaxError = which wi= ll make it array [] with respect to arguments for the state to save, Anyway= s I have also changed it to pass [] instead of null for better clarity.
We have all those checks in our function so it= check for those condition and save the state only if those returns True.

- The functions extracted when are called = do not use all the parameters. This tells us that the function groups too m= uch functionality that is not used in same cases. Maybe we should split thi= s function into smaller functions that do each part.
=E2=80=8BWe already had split up the f= unction in two part.
=E2=80=8B


Thanks
Victoria & Joao

On Tue, Apr 3, 2018 at 11:38 AM Murtuza Zabuawala <murtuza.za= buawala@enterprisedb.com> wrote:
Hi Dave,

PFA updated patch, I've rena= med it to=C2=A0query_tool_http_error_handler.js &=C2=A0query_tool_= http_error_handler_spec.js respectively.=C2=A0

=
--
Regards,
Murtuza Zabuawala
EnterpriseDB:=C2=A0h= ttp://www.enterprisedb.com
The Enterprise PostgreSQL Company


On Tue, Apr 3, 2018 at 7:43 PM, Dave Page <= dpage@pgadmin.org> wrote:
HI

On Tue, Apr 3, 2018 at 12:27 PM, Murtuza Zabuawala = <murtuza.zabuawala@enterprisedb.com> w= rote:
Hi,

PFA pat= ch to extract the common code from query tool to handle ajax errors & c= onnection handling, Also added unit tests around extracted code.=C2=A0

Looks good to me, except, I wonder = if we should rename is_new_transaction_required.js/is_new_transaction_required_spec.js to something a little more = generic; maybe conn_tx_handler_funcs.js? Not sure I like that though.


--
http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseD= B UK: http://www.= enterprisedb.com
The Enterprise PostgreSQL Company


--00000000000053b7a1056901d1b7-- --00000000000053b7a5056901d1b9 Content-Type: application/octet-stream; name="RM_3235_v2.diff" Content-Disposition: attachment; filename="RM_3235_v2.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jfkuhf100 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zcWxlZGl0b3IvZXhlY3V0ZV9xdWVy eS5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zcWxlZGl0b3IvZXhlY3V0ZV9xdWVyeS5qcwpp bmRleCA5YzM2ZjI4Li4zMzNhM2EyIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMv c3FsZWRpdG9yL2V4ZWN1dGVfcXVlcnkuanMKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3Nx bGVkaXRvci9leGVjdXRlX3F1ZXJ5LmpzCkBAIC0xMSw3ICsxMSw3IEBAIGltcG9ydCBnZXR0ZXh0 IGZyb20gJy4uL2dldHRleHQnOwogaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JzsKIGltcG9ydCB1cmxf Zm9yIGZyb20gJy4uL3VybF9mb3InOwogaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJzsKLWltcG9y dCAqIGFzIHRyYW5zYWN0aW9uIGZyb20gJy4vaXNfbmV3X3RyYW5zYWN0aW9uX3JlcXVpcmVkJzsK K2ltcG9ydCAqIGFzIGh0dHBFcnJvckhhbmRsZXIgZnJvbSAnLi9xdWVyeV90b29sX2h0dHBfZXJy b3JfaGFuZGxlcic7CiAKIGNsYXNzIExvYWRpbmdTY3JlZW4gewogICBjb25zdHJ1Y3RvcihzcWxF ZGl0b3IpIHsKQEAgLTE1Miw4ICsxNTIsOCBAQCBjbGFzcyBFeGVjdXRlUXVlcnkgewogCiAgICAg ICAgIGNvbnN0IGVycm9yRGF0YSA9IGVycm9yLnJlc3BvbnNlLmRhdGE7CiAKLSAgICAgICAgaWYg KHNlbGYudXNlck1hbmFnZW1lbnQuaXNfcGdhX2xvZ2luX3JlcXVpcmVkKGVycm9yRGF0YSkpIHsK LSAgICAgICAgICByZXR1cm4gc2VsZi51c2VyTWFuYWdlbWVudC5wZ2FfbG9naW4oKTsKKyAgICAg ICAgaWYgKHNlbGYudXNlck1hbmFnZW1lbnQuaXNQZ2FMb2dpblJlcXVpcmVkKGVycm9yRGF0YSkp IHsKKyAgICAgICAgICByZXR1cm4gc2VsZi51c2VyTWFuYWdlbWVudC5wZ2FMb2dpbigpOwogICAg ICAgICB9CiAKICAgICAgICAgbGV0IG1zZyA9IEV4ZWN1dGVRdWVyeS5leHRyYWN0RXJyb3JNZXNz YWdlKGVycm9yRGF0YSk7CkBAIC0xOTgsMTggKzE5OCwxOCBAQCBjbGFzcyBFeGVjdXRlUXVlcnkg ewogICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICh0aGlzLnVzZXJNYW5hZ2VtZW50Lmlz X3BnYV9sb2dpbl9yZXF1aXJlZChodHRwTWVzc2FnZS5yZXNwb25zZSkpIHsKLSAgICAgIHRoaXMu c3FsU2VydmVyT2JqZWN0LnNhdmVfc3RhdGUoJ2V4ZWN1dGUnLCBbdGhpcy5leHBsYWluUGxhbl0p OwotICAgICAgdGhpcy51c2VyTWFuYWdlbWVudC5wZ2FfbG9naW4oKTsKKyAgICBpZiAodGhpcy51 c2VyTWFuYWdlbWVudC5pc1BnYUxvZ2luUmVxdWlyZWQoaHR0cE1lc3NhZ2UucmVzcG9uc2UpKSB7 CisgICAgICB0aGlzLnNxbFNlcnZlck9iamVjdC5zYXZlU3RhdGUoJ2V4ZWN1dGUnLCBbdGhpcy5l eHBsYWluUGxhbl0pOworICAgICAgdGhpcy51c2VyTWFuYWdlbWVudC5wZ2FMb2dpbigpOwogICAg IH0KIAotICAgIGlmICh0cmFuc2FjdGlvbi5pc19uZXdfdHJhbnNhY3Rpb25fcmVxdWlyZWQoaHR0 cE1lc3NhZ2UucmVzcG9uc2UpKSB7Ci0gICAgICB0aGlzLnNxbFNlcnZlck9iamVjdC5zYXZlX3N0 YXRlKCdleGVjdXRlJywgW3RoaXMuZXhwbGFpblBsYW5dKTsKLSAgICAgIHRoaXMuc3FsU2VydmVy T2JqZWN0LmluaXRfdHJhbnNhY3Rpb24oKTsKKyAgICBpZiAoaHR0cEVycm9ySGFuZGxlci5odHRw UmVzcG9uc2VSZXF1aXJlc05ld1RyYW5zYWN0aW9uKGh0dHBNZXNzYWdlLnJlc3BvbnNlKSkgewor ICAgICAgdGhpcy5zcWxTZXJ2ZXJPYmplY3Quc2F2ZVN0YXRlKCdleGVjdXRlJywgW3RoaXMuZXhw bGFpblBsYW5dKTsKKyAgICAgIHRoaXMuc3FsU2VydmVyT2JqZWN0LmluaXRUcmFuc2FjdGlvbigp OwogICAgIH0KIAogICAgIGlmICh0aGlzLndhc0RhdGFiYXNlQ29ubmVjdGlvbkxvc3QoaHR0cE1l c3NhZ2UpKSB7Ci0gICAgICB0aGlzLnNxbFNlcnZlck9iamVjdC5zYXZlX3N0YXRlKCdleGVjdXRl JywgW3RoaXMuZXhwbGFpblBsYW5dKTsKKyAgICAgIHRoaXMuc3FsU2VydmVyT2JqZWN0LnNhdmVT dGF0ZSgnZXhlY3V0ZScsIFt0aGlzLmV4cGxhaW5QbGFuXSk7CiAgICAgICB0aGlzLnNxbFNlcnZl ck9iamVjdC5oYW5kbGVfY29ubmVjdGlvbl9sb3N0KGZhbHNlLCBodHRwTWVzc2FnZSk7CiAgICAg fQogCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc3FsZWRpdG9yL2lzX25ld190 cmFuc2FjdGlvbl9yZXF1aXJlZC5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zcWxlZGl0b3Iv aXNfbmV3X3RyYW5zYWN0aW9uX3JlcXVpcmVkLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCBlMDA5NjExLi4wMDAwMDAwCi0tLSBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zcWxlZGl0 b3IvaXNfbmV3X3RyYW5zYWN0aW9uX3JlcXVpcmVkLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjMg KzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FM IFRvb2xzCi0vLwotLy8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwgVGhlIHBnQWRtaW4gRGV2 ZWxvcG1lbnQgVGVhbQotLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9z dGdyZVNRTCBMaWNlbmNlCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotZXhwb3J0IGZ1bmN0aW9u IGlzX25ld190cmFuc2FjdGlvbl9yZXF1aXJlZCh4aHIpIHsKLSAgLyogSWYgcmVzcG9uc2VKU09O IGlzIHVuZGVmaW5lZCB0aGVuIGl0IGNvdWxkIGJlIG9iamVjdCBvZgotICAgKiBheGlvcyhQcm9t aXNlIEhUVFApIHJlc3BvbnNlLCBzbyB3ZSBzaG91bGQgY2hlY2sgYWNjb3JkaW5nbHkuCi0gICAq LwotICBpZiAoeGhyLnJlc3BvbnNlSlNPTiA9PT0gdW5kZWZpbmVkICYmIHhoci5kYXRhICE9PSB1 bmRlZmluZWQpIHsKLSAgICByZXR1cm4geGhyLnN0YXR1cyA9PT0gNDA0ICYmIHhoci5kYXRhICYm Ci0gICAgICAgICAgICAgIHhoci5kYXRhLmluZm8gJiYKLSAgICAgICAgICAgICAgeGhyLmRhdGEu aW5mbyA9PT0gJ0RBVEFHUklEX1RSQU5TQUNUSU9OX1JFUVVJUkVEJzsKLSAgfQotCi0gIHJldHVy biB4aHIuc3RhdHVzID09PSA0MDQgJiYgeGhyLnJlc3BvbnNlSlNPTiAmJgotICAgIHhoci5yZXNw b25zZUpTT04uaW5mbyAmJgotICAgIHhoci5yZXNwb25zZUpTT04uaW5mbyA9PT0gJ0RBVEFHUklE X1RSQU5TQUNUSU9OX1JFUVVJUkVEJzsKLX0KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRp Yy9qcy9zcWxlZGl0b3IvcXVlcnlfdG9vbF9odHRwX2Vycm9yX2hhbmRsZXIuanMgYi93ZWIvcGdh ZG1pbi9zdGF0aWMvanMvc3FsZWRpdG9yL3F1ZXJ5X3Rvb2xfaHR0cF9lcnJvcl9oYW5kbGVyLmpz Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMjI0ZWQKLS0tIC9kZXYvbnVs bAorKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc3FsZWRpdG9yL3F1ZXJ5X3Rvb2xfaHR0cF9l cnJvcl9oYW5kbGVyLmpzCkBAIC0wLDAgKzEsNzYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLwor Ly8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykgMjAx MyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUg aXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vCitpbXBvcnQgZ2V0dGV4dCBmcm9tICdzb3VyY2VzL2dldHRleHQnOworCitleHBvcnQg ZnVuY3Rpb24gaHR0cFJlc3BvbnNlUmVxdWlyZXNOZXdUcmFuc2FjdGlvbih4aHIpIHsKKyAgLyog SWYgcmVzcG9uc2VKU09OIGlzIHVuZGVmaW5lZCB0aGVuIGl0IGNvdWxkIGJlIG9iamVjdCBvZgor ICAgKiBheGlvcyhQcm9taXNlIEhUVFApIHJlc3BvbnNlLCBzbyB3ZSBzaG91bGQgY2hlY2sgYWNj b3JkaW5nbHkuCisgICAqLworICBpZiAoeGhyLnJlc3BvbnNlSlNPTiA9PT0gdW5kZWZpbmVkICYm IHhoci5kYXRhICE9PSB1bmRlZmluZWQpIHsKKyAgICByZXR1cm4geGhyLnN0YXR1cyA9PT0gNDA0 ICYmIHhoci5kYXRhICYmCisgICAgICAgICAgICAgIHhoci5kYXRhLmluZm8gJiYKKyAgICAgICAg ICAgICAgeGhyLmRhdGEuaW5mbyA9PT0gJ0RBVEFHUklEX1RSQU5TQUNUSU9OX1JFUVVJUkVEJzsK KyAgfQorCisgIHJldHVybiB4aHIuc3RhdHVzID09PSA0MDQgJiYgeGhyLnJlc3BvbnNlSlNPTiAm JgorICAgIHhoci5yZXNwb25zZUpTT04uaW5mbyAmJgorICAgIHhoci5yZXNwb25zZUpTT04uaW5m byA9PT0gJ0RBVEFHUklEX1RSQU5TQUNUSU9OX1JFUVVJUkVEJzsKK30KKworLy8gQWxsb3cgdXMg dG8gcmVkaXJlY3QgdG8gbG9naW4gZGlhbG9nIGFuZCBpZiByZXF1aXJlZCB0aGVuIHJlLWluaXRp YXRlIHRoZSB0cmFuc2FjdGlvbgorZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUxvZ2luUmVxdWlyZWRB bmRUcmFuc2FjdGlvblJlcXVpcmVkKAorICBwZ0FkbWluLCBoYW5kbGVyLCBleGNlcHRpb24sIHN0 YXRlVG9TYXZlLCBzdGF0ZVBhcmFtZXRlcnMsIGNoZWNrVHJhbnNhY3Rpb24KKykgeworICBzdGF0 ZVBhcmFtZXRlcnMgPSBzdGF0ZVBhcmFtZXRlcnMgJiYgc3RhdGVQYXJhbWV0ZXJzLmxlbmd0aCA+ IDAgPyBzdGF0ZVBhcmFtZXRlcnMgOiBbXTsKKyAgaWYgKHBnQWRtaW4uQnJvd3Nlci5Vc2VyTWFu YWdlbWVudC5pc1BnYUxvZ2luUmVxdWlyZWQoZXhjZXB0aW9uKSkgeworICAgIGlmIChzdGF0ZVRv U2F2ZSkgeworICAgICAgaGFuZGxlci5zYXZlU3RhdGUoc3RhdGVUb1NhdmUsIHN0YXRlUGFyYW1l dGVycyk7CisgICAgfQorICAgIHJldHVybiBwZ0FkbWluLkJyb3dzZXIuVXNlck1hbmFnZW1lbnQu cGdhTG9naW4oKTsKKyAgfQorCisgIGlmKGNoZWNrVHJhbnNhY3Rpb24gJiYgaHR0cFJlc3BvbnNl UmVxdWlyZXNOZXdUcmFuc2FjdGlvbihleGNlcHRpb24pKSB7CisgICAgaWYgKHN0YXRlVG9TYXZl KSB7CisgICAgICBoYW5kbGVyLnNhdmVTdGF0ZShzdGF0ZVRvU2F2ZSwgc3RhdGVQYXJhbWV0ZXJz KTsKKyAgICB9CisgICAgcmV0dXJuIGhhbmRsZXIuaW5pdFRyYW5zYWN0aW9uKCk7CisgIH0KK30K KworLy8gQWxsb3cgdXMgdG8gaGFuZGxlIHRoZSBBSkFYIGVycm9yIGZyb20gUXVlcnkgdG9vbAor ZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVF1ZXJ5VG9vbEFqYXhFcnJvcigKKyAgcGdBZG1pbiwgaGFu ZGxlciwgZXhjZXB0aW9uLCBzdGF0ZVRvU2F2ZSwgc3RhdGVQYXJhbWV0ZXJzLCBjaGVja1RyYW5z YWN0aW9uCispIHsKKyAgaWYgKGV4Y2VwdGlvbi5yZWFkeVN0YXRlID09PSAwKSB7CisgICAgcmV0 dXJuIGdldHRleHQoJ05vdCBjb25uZWN0ZWQgdG8gdGhlIHNlcnZlciBvciB0aGUgY29ubmVjdGlv biB0byB0aGUgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKTsKKyAgfQorCisgIGhhbmRsZUxvZ2lu UmVxdWlyZWRBbmRUcmFuc2FjdGlvblJlcXVpcmVkKAorICAgIHBnQWRtaW4sIGhhbmRsZXIsIGV4 Y2VwdGlvbiwgc3RhdGVUb1NhdmUsIHN0YXRlUGFyYW1ldGVycywgY2hlY2tUcmFuc2FjdGlvbgor ICApOworCisgIGxldCBtc2cgPSBleGNlcHRpb24ucmVzcG9uc2VUZXh0OworICBpZiAoZXhjZXB0 aW9uLnJlc3BvbnNlSlNPTiAhPT0gdW5kZWZpbmVkKSB7CisgICAgaWYoZXhjZXB0aW9uLnJlc3Bv bnNlSlNPTi5lcnJvcm1zZyAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBtc2cgPSBleGNlcHRpb24u cmVzcG9uc2VKU09OLmVycm9ybXNnOworICAgIH0KKworICAgIGlmKGV4Y2VwdGlvbi5zdGF0dXMg PT09IDUwMyAmJiBleGNlcHRpb24ucmVzcG9uc2VKU09OLmluZm8gIT09IHVuZGVmaW5lZCAmJgor ICAgICAgICBleGNlcHRpb24ucmVzcG9uc2VKU09OLmluZm8gPT0gJ0NPTk5FQ1RJT05fTE9TVCcp IHsKKyAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGlmIChzdGF0ZVRvU2F2 ZSkgeworICAgICAgICAgIGhhbmRsZXIuc2F2ZVN0YXRlKHN0YXRlVG9TYXZlLCBzdGF0ZVBhcmFt ZXRlcnMpOworICAgICAgICB9CisgICAgICAgIGhhbmRsZXIuaGFuZGxlX2Nvbm5lY3Rpb25fbG9z dChmYWxzZSwgZXhjZXB0aW9uKTsKKyAgICAgIH0pOworICAgIH0KKyAgfQorCisgIHJldHVybiBt c2c7Cit9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3RhdGljL2pz L3NxbGVkaXRvci5qcyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9zdGF0aWMvanMvc3Fs ZWRpdG9yLmpzCmluZGV4IDA0MDlhODcuLjYwZGFjYmIgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWlu L3Rvb2xzL3NxbGVkaXRvci9zdGF0aWMvanMvc3FsZWRpdG9yLmpzCisrKyBiL3dlYi9wZ2FkbWlu L3Rvb2xzL3NxbGVkaXRvci9zdGF0aWMvanMvc3FsZWRpdG9yLmpzCkBAIC0xMyw3ICsxMyw3IEBA IGRlZmluZSgndG9vbHMucXVlcnl0b29sJywgWwogICAnc291cmNlcy9zZWxlY3Rpb24vc2V0X3N0 YWdlZF9yb3dzJywKICAgJ3NvdXJjZXMvc3FsZWRpdG9yX3V0aWxzJywKICAgJ3NvdXJjZXMvc3Fs ZWRpdG9yL2V4ZWN1dGVfcXVlcnknLAotICAnc291cmNlcy9zcWxlZGl0b3IvaXNfbmV3X3RyYW5z YWN0aW9uX3JlcXVpcmVkJywKKyAgJ3NvdXJjZXMvc3FsZWRpdG9yL3F1ZXJ5X3Rvb2xfaHR0cF9l cnJvcl9oYW5kbGVyJywKICAgJ3NvdXJjZXMvaGlzdG9yeS9pbmRleC5qcycsCiAgICdzb3VyY2Vz Ly4uL2pzeC9oaXN0b3J5L3F1ZXJ5X2hpc3RvcnknLAogICAncmVhY3QnLCAncmVhY3QtZG9tJywK QEAgLTMzLDcgKzMzLDcgQEAgZGVmaW5lKCd0b29scy5xdWVyeXRvb2wnLCBbCiBdLCBmdW5jdGlv bigKICAgYmFiZWxQb2xseWZpbGwsIGdldHRleHQsIHVybF9mb3IsICQsIF8sIFMsIGFsZXJ0aWZ5 LCBwZ0FkbWluLCBCYWNrYm9uZSwgY29kZW1pcnJvciwKICAgcGdFeHBsYWluLCBHcmlkU2VsZWN0 b3IsIEFjdGl2ZUNlbGxDYXB0dXJlLCBjbGlwYm9hcmQsIGNvcHlEYXRhLCBSYW5nZVNlbGVjdGlv bkhlbHBlciwgaGFuZGxlUXVlcnlPdXRwdXRLZXlib2FyZEV2ZW50LAotICBYQ2VsbFNlbGVjdGlv bk1vZGVsLCBzZXRTdGFnZWRSb3dzLCBTcWxFZGl0b3JVdGlscywgRXhlY3V0ZVF1ZXJ5LCB0cmFu c2FjdGlvbiwKKyAgWENlbGxTZWxlY3Rpb25Nb2RlbCwgc2V0U3RhZ2VkUm93cywgU3FsRWRpdG9y VXRpbHMsIEV4ZWN1dGVRdWVyeSwgaHR0cEVycm9ySGFuZGxlciwKICAgSGlzdG9yeUJ1bmRsZSwg cXVlcnlIaXN0b3J5LCBSZWFjdCwgUmVhY3RET00sCiAgIGtleWJvYXJkU2hvcnRjdXRzLCBxdWVy eVRvb2xBY3Rpb25zLCBEYXRhZ3JpZCwgbW9kaWZ5QW5pbWF0aW9uLAogICBjYWxjdWxhdGVRdWVy eVJ1blRpbWUsIGNhbGxSZW5kZXJBZnRlclBvbGwpIHsKQEAgLTQ4NiwxMiArNDg2LDkgQEAgZGVm aW5lKCd0b29scy5xdWVyeXRvb2wnLCBbCiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg ICAgIH0sCiAgICAgICAgICAgICAgIGVycm9yOmZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAg ICBpZiAocGdBZG1pbi5Ccm93c2VyLlVzZXJNYW5hZ2VtZW50LmlzX3BnYV9sb2dpbl9yZXF1aXJl ZChlKSkgewotICAgICAgICAgICAgICAgICAgcmV0dXJuIHBnQWRtaW4uQnJvd3Nlci5Vc2VyTWFu YWdlbWVudC5wZ2FfbG9naW4oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg aWYodHJhbnNhY3Rpb24uaXNfbmV3X3RyYW5zYWN0aW9uX3JlcXVpcmVkKGUpKSB7Ci0gICAgICAg ICAgICAgICAgICByZXR1cm4gc2VsZi5pbml0X3RyYW5zYWN0aW9uKCk7Ci0gICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBodHRwRXJyb3JIYW5kbGVyLmhhbmRsZUxvZ2lu UmVxdWlyZWRBbmRUcmFuc2FjdGlvblJlcXVpcmVkKAorICAgICAgICAgICAgICAgICAgcGdBZG1p biwgc2VsZiwgZSwgbnVsbCwgW10sIGZhbHNlCisgICAgICAgICAgICAgICAgKTsKICAgICAgICAg ICAgICAgfSwKICAgICAgICAgICAgIH0pOwogICAgICAgICAgIH0uYmluZChjdHgpLApAQCAtMTE0 MiwxNiArMTEzOSwxMSBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsKICAgICAgICAgICBp ZiAodHlwZW9mIGNiID09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgIGNiKCk7CiAgICAgICAg ICAgfQotICAgICAgICAgIGlmIChlLnJlYWR5U3RhdGUgPT0gMCkgewotICAgICAgICAgICAgc2Vs Zi51cGRhdGVfbXNnX2hpc3RvcnkoZmFsc2UsCi0gICAgICAgICAgICAgIGdldHRleHQoJ05vdCBj b25uZWN0ZWQgdG8gdGhlIHNlcnZlciBvciB0aGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIGhh cyBiZWVuIGNsb3NlZC4nKQotICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg ICAgICAgICB9CiAKLSAgICAgICAgICBpZiAocGdBZG1pbi5Ccm93c2VyLlVzZXJNYW5hZ2VtZW50 LmlzX3BnYV9sb2dpbl9yZXF1aXJlZChlKSkgewotICAgICAgICAgICAgcGdBZG1pbi5Ccm93c2Vy LlVzZXJNYW5hZ2VtZW50LnBnYV9sb2dpbigpOwotICAgICAgICAgIH0KKyAgICAgICAgICBsZXQg bXNnID0gaHR0cEVycm9ySGFuZGxlci5oYW5kbGVRdWVyeVRvb2xBamF4RXJyb3IoCisgICAgICAg ICAgICBwZ0FkbWluLCBzZWxmLCBlLCBudWxsLCBbXSwgZmFsc2UKKyAgICAgICAgICApOworICAg ICAgICAgIHNlbGYudXBkYXRlX21zZ19oaXN0b3J5KGZhbHNlLCBtc2cpOwogICAgICAgICB9LAog ICAgICAgfSk7CiAgICAgfSwKQEAgLTE4MTUsMTAgKzE4MDcsMTAgQEAgZGVmaW5lKCd0b29scy5x dWVyeXRvb2wnLCBbCiAgICAgICAgICAgc2VsZi53YXJuX2JlZm9yZV9jb250aW51ZSgpOwogICAg ICAgICB9KTsKICAgICAgICAgcGdCcm93c2VyLkV2ZW50cy5vbigncGdhZG1pbjp1c2VyOmxvZ2dl ZC1pbicsIGZ1bmN0aW9uKCkgewotICAgICAgICAgIHNlbGYuaW5pdF90cmFuc2FjdGlvbigpOwor ICAgICAgICAgIHNlbGYuaW5pdFRyYW5zYWN0aW9uKCk7CiAgICAgICAgIH0pOwogICAgICAgfSwK LSAgICAgIHNhdmVfc3RhdGU6IGZ1bmN0aW9uKGZuLCBhcmdzKSB7CisgICAgICBzYXZlU3RhdGU6 IGZ1bmN0aW9uKGZuLCBhcmdzKSB7CiAgICAgICAgIGlmIChmbikgewogICAgICAgICAgIHRoaXMu c3RhdGUgPSB7CiAgICAgICAgICAgICAnZm4nOiBmbiwKQEAgLTE4MjksNyArMTgyMSw3IEBAIGRl ZmluZSgndG9vbHMucXVlcnl0b29sJywgWwogICAgICAgICB9CiAgICAgICB9LAogCi0gICAgICBp bml0X3RyYW5zYWN0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgIGluaXRUcmFuc2FjdGlvbjogZnVu Y3Rpb24oKSB7CiAgICAgICAgIHZhciB1cmxfZW5kcG9pbnQ7CiAgICAgICAgIGlmICh0aGlzLmlz X3F1ZXJ5X3Rvb2wpIHsKICAgICAgICAgICB1cmxfZW5kcG9pbnQgPSAnZGF0YWdyaWQuaW5pdGlh bGl6ZV9xdWVyeV90b29sJzsKQEAgLTE4OTgsNyArMTg5MCw3IEBAIGRlZmluZSgndG9vbHMucXVl cnl0b29sJywgWwogICAgICAgICAgICAgaWYgKCdmbicgaW4gc2VsZi5zdGF0ZSkgewogICAgICAg ICAgICAgICB2YXIgZm4gPSBzZWxmLnN0YXRlWydmbiddLAogICAgICAgICAgICAgICAgIGFyZ3Mg PSBzZWxmLnN0YXRlWydhcmdzJ107Ci0gICAgICAgICAgICAgIHNlbGYuc2F2ZV9zdGF0ZSgpOwor ICAgICAgICAgICAgICBzZWxmLnNhdmVTdGF0ZSgpOwogICAgICAgICAgICAgICBpZiAoYXJncy5p bmRleE9mKCdjb25uZWN0JykgPT0gLTEpIHsKICAgICAgICAgICAgICAgICBhcmdzLnB1c2goJ2Nv bm5lY3QnKTsKICAgICAgICAgICAgICAgfQpAQCAtMTkwNiw3ICsxODk4LDcgQEAgZGVmaW5lKCd0 b29scy5xdWVyeXRvb2wnLCBbCiAgICAgICAgICAgICAgIHNlbGZbZm5dLmFwcGx5KHNlbGYsIGFy Z3MpOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICAg ICAgc2VsZi5zYXZlX3N0YXRlKCk7CisgICAgICAgICAgICBzZWxmLnNhdmVTdGF0ZSgpOwogICAg ICAgICAgIH0pCiAgICAgICAgICAgLnNldCh7CiAgICAgICAgICAgICBsYWJlbHM6IHsKQEAgLTE5 MjUsMjggKzE5MTcsMjIgQEAgZGVmaW5lKCd0b29scy5xdWVyeXRvb2wnLCBbCiAgICAgICAgICAg aWYgKHJlcy5zdWNjZXNzID09IDEpIHsKICAgICAgICAgICAgIGFsZXJ0aWZ5LnN1Y2Nlc3MocmVz LmluZm8pOwogICAgICAgICAgICAgaWYgKGNyZWF0ZV90cmFuc2FjdGlvbikgewotICAgICAgICAg ICAgICBzZWxmLmluaXRfdHJhbnNhY3Rpb24oKTsKKyAgICAgICAgICAgICAgc2VsZi5pbml0VHJh bnNhY3Rpb24oKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ2ZuJyBpbiBzZWxmLnN0YXRlKSB7 CiAgICAgICAgICAgICAgIHZhciBmbiA9IHNlbGYuc3RhdGVbJ2ZuJ10sCiAgICAgICAgICAgICAg ICAgYXJncyA9IHNlbGYuc3RhdGVbJ2FyZ3MnXTsKLSAgICAgICAgICAgICAgc2VsZi5zYXZlX3N0 YXRlKCk7CisgICAgICAgICAgICAgIHNlbGYuc2F2ZVN0YXRlKCk7CiAgICAgICAgICAgICAgIHNl bGZbZm5dLmFwcGx5KHNlbGYsIGFyZ3MpOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAg ICAgICAgfSkKICAgICAgICAgLmZhaWwoZnVuY3Rpb24oeGhyKSB7Ci0gICAgICAgICAgaWYgKHBn QWRtaW4uQnJvd3Nlci5Vc2VyTWFuYWdlbWVudC5pc19wZ2FfbG9naW5fcmVxdWlyZWQoeGhyKSkg ewotICAgICAgICAgICAgcGdBZG1pbi5Ccm93c2VyLlVzZXJNYW5hZ2VtZW50LnBnYV9sb2dpbigp OwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZih4aHIucmVzcG9uc2VKU09OICYm Ci0gICAgICAgICAgICAgICAgeGhyLnJlc3BvbnNlSlNPTi5yZXN1bHQpIHsKLSAgICAgICAgICAg ICAgYWxlcnRpZnkuZGxnR2V0U2VydmVyUGFzcyhnZXR0ZXh0KCdDb25uZWN0IHRvIFNlcnZlcicp LAotICAgICAgICAgICAgICAgIHhoci5yZXNwb25zZUpTT04ucmVzdWx0KTsKLSAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGFsZXJ0aWZ5LmRsZ0dldFNlcnZlclBhc3MoZ2V0dGV4 dCgnQ29ubmVjdCB0byBTZXJ2ZXInKSwKLSAgICAgICAgICAgICAgICB4aHIucmVzcG9uc2VUZXh0 KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9CisgICAgICAgICAgbGV0IG1zZyA9IGh0dHBF cnJvckhhbmRsZXIuaGFuZGxlUXVlcnlUb29sQWpheEVycm9yKAorICAgICAgICAgICAgcGdBZG1p biwgc2VsZiwgeGhyLCBudWxsLCBbXSwgZmFsc2UKKyAgICAgICAgICApOworICAgICAgICAgIGFs ZXJ0aWZ5LmRsZ0dldFNlcnZlclBhc3MoCisgICAgICAgICAgICBnZXR0ZXh0KCdDb25uZWN0IHRv IFNlcnZlcicpLCBtc2cKKyAgICAgICAgICApOwogICAgICAgICB9KTsKICAgICAgIH0sCiAgICAg ICAvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlIG9mIFNRTEVkaXRv clZpZXcsCkBAIC0yMDA1LDIyICsxOTkxLDEzIEBAIGRlZmluZSgndG9vbHMucXVlcnl0b29sJywg WwogICAgICAgICAgICAgICAgIHNlbGYuaW5pdF9ldmVudHMoKTsKICAgICAgICAgICAgICAgfSwK ICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGpxeCkgewotICAgICAgICAgICAgICAgIHZh ciBtc2cgPSAnJzsKKyAgICAgICAgICAgICAgICBsZXQgbXNnID0gJyc7CiAgICAgICAgICAgICAg ICAgc2VsZi5pbml0X2V2ZW50cygpOwogCi0gICAgICAgICAgICAgICAgaWYgKHBnQWRtaW4uQnJv d3Nlci5Vc2VyTWFuYWdlbWVudC5pc19wZ2FfbG9naW5fcmVxdWlyZWQoanF4KSkgewotICAgICAg ICAgICAgICAgICAgcmV0dXJuIHBnQWRtaW4uQnJvd3Nlci5Vc2VyTWFuYWdlbWVudC5wZ2FfbG9n aW4oKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbXNnID0gaHR0cEVycm9y SGFuZGxlci5oYW5kbGVRdWVyeVRvb2xBamF4RXJyb3IoCisgICAgICAgICAgICAgICAgICBwZ0Fk bWluLCBzZWxmLCBqcXgsIG51bGwsIFtdLCBmYWxzZQorICAgICAgICAgICAgICAgICk7CiAKLSAg ICAgICAgICAgICAgICAvKiBFcnJvciBmcm9tIHRoZSBzZXJ2ZXIgKi8KLSAgICAgICAgICAgICAg ICBpZiAoanF4LnN0YXR1cyA9PSA0MTAgfHwganF4LnN0YXR1cyA9PSA1MDApIHsKLSAgICAgICAg ICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gJC5wYXJzZUpT T04oanF4LnJlc3BvbnNlVGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIG1zZyA9IGRhdGEuZXJy b3Jtc2c7Ci0gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAg ICAgIG1zZyA9IGpxeC5yZXNwb25zZVRleHQ7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgIHBnQnJvd3Nlci5yZXBvcnRfZXJyb3IoCiAgICAg ICAgICAgICAgICAgICBTKGdldHRleHQoJ0Vycm9yIGZldGNoaW5nIFNRTCBmb3Igc2NyaXB0OiAl cy4nKSkuc3ByaW50Zihtc2cpLnZhbHVlKCkKICAgICAgICAgICAgICAgICApOwpAQCAtMjE4OSwz NyArMjE2Niw5IEBAIGRlZmluZSgndG9vbHMucXVlcnl0b29sJywgWwogICAgICAgICAgIH0sCiAg ICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgIHNlbGYudHJpZ2dlcign cGdhZG1pbi1zcWxlZGl0b3I6bG9hZGluZy1pY29uOmhpZGUnKTsKLSAgICAgICAgICAgIGlmIChl LnJlYWR5U3RhdGUgPT0gMCkgewotICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9tc2dfaGlzdG9y eShmYWxzZSwKLSAgICAgICAgICAgICAgICBnZXR0ZXh0KCdOb3QgY29ubmVjdGVkIHRvIHRoZSBz ZXJ2ZXIgb3IgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuJykK LSAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgaWYgKHBnQWRtaW4uQnJvd3Nlci5Vc2VyTWFuYWdlbWVudC5pc19wZ2FfbG9n aW5fcmVxdWlyZWQoZSkpIHsKLSAgICAgICAgICAgICAgc2VsZi5zYXZlX3N0YXRlKCdfcnVuX3F1 ZXJ5JywgW10pOwotICAgICAgICAgICAgICBwZ0FkbWluLkJyb3dzZXIuVXNlck1hbmFnZW1lbnQu cGdhX2xvZ2luKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmKHRyYW5zYWN0aW9u LmlzX25ld190cmFuc2FjdGlvbl9yZXF1aXJlZChlKSkgewotICAgICAgICAgICAgICBzZWxmLnNh dmVfc3RhdGUoJ19ydW5fcXVlcnknLCBbXSk7Ci0gICAgICAgICAgICAgIHNlbGYuaW5pdF90cmFu c2FjdGlvbigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgbXNnID0gZS5yZXNw b25zZVRleHQ7Ci0gICAgICAgICAgICBpZiAoZS5yZXNwb25zZUpTT04gIT0gdW5kZWZpbmVkKSB7 Ci0gICAgICAgICAgICAgIGlmKGUucmVzcG9uc2VKU09OLmVycm9ybXNnICE9IHVuZGVmaW5lZCkg ewotICAgICAgICAgICAgICAgIG1zZyA9IGUucmVzcG9uc2VKU09OLmVycm9ybXNnOwotICAgICAg ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgaWYoZS5zdGF0dXMgPT0gNTAzICYmIGUucmVzcG9u c2VKU09OLmluZm8gIT0gdW5kZWZpbmVkICYmCi0gICAgICAgICAgICAgICAgICBlLnJlc3BvbnNl SlNPTi5pbmZvID09ICdDT05ORUNUSU9OX0xPU1QnKSB7Ci0gICAgICAgICAgICAgICAgc2V0VGlt ZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgIHNlbGYuc2F2ZV9zdGF0ZSgnX3J1 bl9xdWVyeScsIFtdKTsKLSAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nvbm5lY3Rpb25f bG9zdChmYWxzZSwgZSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIH0KLQorICAgICAgICAgICAgbGV0IG1zZyA9IGh0dHBFcnJvckhhbmRsZXIuaGFu ZGxlUXVlcnlUb29sQWpheEVycm9yKAorICAgICAgICAgICAgICBwZ0FkbWluLCBzZWxmLCBlLCAn X3J1bl9xdWVyeScsIFtdLCB0cnVlCisgICAgICAgICAgICApOwogICAgICAgICAgICAgc2VsZi51 cGRhdGVfbXNnX2hpc3RvcnkoZmFsc2UsIG1zZyk7CiAgICAgICAgICAgfSwKICAgICAgICAgfSk7 CkBAIC0yODMwLDM4ICsyNzc5LDEwIEBAIGRlZmluZSgndG9vbHMucXVlcnl0b29sJywgWwogICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9u KGUpIHsKLSAgICAgICAgICAgICAgaWYgKGUucmVhZHlTdGF0ZSA9PSAwKSB7Ci0gICAgICAgICAg ICAgICAgc2VsZi51cGRhdGVfbXNnX2hpc3RvcnkoZmFsc2UsCi0gICAgICAgICAgICAgICAgICBn ZXR0ZXh0KCdOb3QgY29ubmVjdGVkIHRvIHRoZSBzZXJ2ZXIgb3IgdGhlIGNvbm5lY3Rpb24gdG8g dGhlIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuJykKLSAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGlmIChw Z0FkbWluLkJyb3dzZXIuVXNlck1hbmFnZW1lbnQuaXNfcGdhX2xvZ2luX3JlcXVpcmVkKGUpKSB7 Ci0gICAgICAgICAgICAgICAgc2VsZi5zYXZlX3N0YXRlKCdfc2F2ZScsIFt2aWV3LCBjb250cm9s bGVyLCBzYXZlX2FzXSk7Ci0gICAgICAgICAgICAgICAgcGdBZG1pbi5Ccm93c2VyLlVzZXJNYW5h Z2VtZW50LnBnYV9sb2dpbigpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgaWYo dHJhbnNhY3Rpb24uaXNfbmV3X3RyYW5zYWN0aW9uX3JlcXVpcmVkKGUpKSB7Ci0gICAgICAgICAg ICAgICAgc2VsZi5zYXZlX3N0YXRlKCdfc2F2ZScsIFt2aWV3LCBjb250cm9sbGVyLCBzYXZlX2Fz XSk7Ci0gICAgICAgICAgICAgICAgc2VsZi5pbml0X3RyYW5zYWN0aW9uKCk7Ci0gICAgICAgICAg ICAgIH0KLQotICAgICAgICAgICAgICB2YXIgbXNnID0gZS5yZXNwb25zZVRleHQ7Ci0gICAgICAg ICAgICAgIGlmIChlLnJlc3BvbnNlSlNPTiAhPSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAg ICBpZihlLnJlc3BvbnNlSlNPTi5lcnJvcm1zZyAhPSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAg ICAgICAgIG1zZyA9IGUucmVzcG9uc2VKU09OLmVycm9ybXNnOwotICAgICAgICAgICAgICAgIH0K LQotICAgICAgICAgICAgICAgIGlmKGUuc3RhdHVzID09IDUwMyAmJiBlLnJlc3BvbnNlSlNPTi5p bmZvICE9IHVuZGVmaW5lZCAmJgotICAgICAgICAgICAgICAgICAgICBlLnJlc3BvbnNlSlNPTi5p bmZvID09ICdDT05ORUNUSU9OX0xPU1QnKSB7Ci0gICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0 KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBzZWxmLnNhdmVfc3RhdGUoJ19zYXZl JywgW3ZpZXcsIGNvbnRyb2xsZXIsIHNhdmVfYXNdKTsKLSAgICAgICAgICAgICAgICAgICAgc2Vs Zi5oYW5kbGVfY29ubmVjdGlvbl9sb3N0KGZhbHNlLCBlKTsKLSAgICAgICAgICAgICAgICAgIH0p OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotCisgICAgICAgICAgICAgIGxl dCBzdGF0ZVBhcmFtcyA9IFt2aWV3LCBjb250cm9sbGVyLCBzYXZlX2FzXTsKKyAgICAgICAgICAg ICAgbGV0IG1zZyA9IGh0dHBFcnJvckhhbmRsZXIuaGFuZGxlUXVlcnlUb29sQWpheEVycm9yKAor ICAgICAgICAgICAgICAgIHBnQWRtaW4sIHNlbGYsIGUsICdfc2F2ZScsIHN0YXRlUGFyYW1zLCB0 cnVlCisgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgIHNlbGYudXBkYXRlX21zZ19oaXN0 b3J5KGZhbHNlLCBtc2cpOwogICAgICAgICAgICAgfSwKICAgICAgICAgICB9KTsKQEAgLTMwMDcs MTMgKzI5MjgsMTEgQEAgZGVmaW5lKCd0b29scy5xdWVyeXRvb2wnLCBbCiAgICAgICAgICAgfSwK ICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgc2VsZi50cmlnZ2Vy KCdwZ2FkbWluLXNxbGVkaXRvcjpsb2FkaW5nLWljb246aGlkZScpOwotICAgICAgICAgICAgaWYg KHBnQWRtaW4uQnJvd3Nlci5Vc2VyTWFuYWdlbWVudC5pc19wZ2FfbG9naW5fcmVxdWlyZWQoZSkp IHsKLSAgICAgICAgICAgICAgc2VsZi5zYXZlX3N0YXRlKCdfc2VsZWN0X2ZpbGVfaGFuZGxlcics IFtfZV0pOwotICAgICAgICAgICAgICByZXR1cm4gcGdBZG1pbi5Ccm93c2VyLlVzZXJNYW5hZ2Vt ZW50LnBnYV9sb2dpbigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgZXJybXNn ID0gJC5wYXJzZUpTT04oZS5yZXNwb25zZVRleHQpLmVycm9ybXNnOwotICAgICAgICAgICAgYWxl cnRpZnkuZXJyb3IoZXJybXNnKTsKKyAgICAgICAgICAgIGxldCBzdGF0ZVBhcmFtcyA9IFtfZV07 CisgICAgICAgICAgICBsZXQgbXNnID0gaHR0cEVycm9ySGFuZGxlci5oYW5kbGVRdWVyeVRvb2xB amF4RXJyb3IoCisgICAgICAgICAgICAgIHBnQWRtaW4sIHNlbGYsIGUsICdfc2VsZWN0X2ZpbGVf aGFuZGxlcicsIHN0YXRlUGFyYW1zLCBmYWxzZQorICAgICAgICAgICAgKTsKKyAgICAgICAgICAg IGFsZXJ0aWZ5LmVycm9yKG1zZyk7CiAgICAgICAgICAgICAvLyBoaWRlIGN1cnNvcgogICAgICAg ICAgICAgJGJ1c3lfaWNvbl9kaXYucmVtb3ZlQ2xhc3MoJ3Nob3dfcHJvZ3Jlc3MnKTsKICAgICAg ICAgICB9LApAQCAtMzA1OSwxNyArMjk3OCwxMSBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcs IFsKICAgICAgICAgICB9LAogICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihlKSB7CiAgICAgICAg ICAgICBzZWxmLnRyaWdnZXIoJ3BnYWRtaW4tc3FsZWRpdG9yOmxvYWRpbmctaWNvbjpoaWRlJyk7 Ci0gICAgICAgICAgICBpZiAocGdBZG1pbi5Ccm93c2VyLlVzZXJNYW5hZ2VtZW50LmlzX3BnYV9s b2dpbl9yZXF1aXJlZChlKSkgewotICAgICAgICAgICAgICBzZWxmLnNhdmVfc3RhdGUoJ19zYXZl X2ZpbGVfaGFuZGxlcicsIFtfZV0pOwotICAgICAgICAgICAgICByZXR1cm4gcGdBZG1pbi5Ccm93 c2VyLlVzZXJNYW5hZ2VtZW50LnBnYV9sb2dpbigpOwotICAgICAgICAgICAgfQotCi0gICAgICAg ICAgICB2YXIgZXJybXNnID0gJC5wYXJzZUpTT04oZS5yZXNwb25zZVRleHQpLmVycm9ybXNnOwot ICAgICAgICAgICAgc2V0VGltZW91dCgKLSAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7Ci0gICAg ICAgICAgICAgICAgYWxlcnRpZnkuZXJyb3IoZXJybXNnKTsKLSAgICAgICAgICAgICAgfSwgMTAK KyAgICAgICAgICAgIGxldCBzdGF0ZVBhcmFtcyA9IFtfZV07CisgICAgICAgICAgICBsZXQgbXNn ID0gaHR0cEVycm9ySGFuZGxlci5oYW5kbGVRdWVyeVRvb2xBamF4RXJyb3IoCisgICAgICAgICAg ICAgIHBnQWRtaW4sIHNlbGYsIGUsICdfc2F2ZV9maWxlX2hhbmRsZXInLCBzdGF0ZVBhcmFtcywg ZmFsc2UKICAgICAgICAgICAgICk7CisgICAgICAgICAgICBhbGVydGlmeS5lcnJvcihtc2cpOwog ICAgICAgICAgIH0sCiAgICAgICAgIH0pOwogICAgICAgfSwKQEAgLTMxNjUsMzYgKzMwNzgsOSBA QCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsKICAgICAgICAgICB9LAogICAgICAgICAgIGVy cm9yOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3BnYWRtaW4tc3Fs ZWRpdG9yOmxvYWRpbmctaWNvbjpoaWRlJyk7Ci0KLSAgICAgICAgICAgIGlmIChwZ0FkbWluLkJy b3dzZXIuVXNlck1hbmFnZW1lbnQuaXNfcGdhX2xvZ2luX3JlcXVpcmVkKGUpKSB7Ci0gICAgICAg ICAgICAgIHNlbGYuc2F2ZV9zdGF0ZSgnX3Nob3dfZmlsdGVyJywgW10pOwotICAgICAgICAgICAg ICByZXR1cm4gcGdBZG1pbi5Ccm93c2VyLlVzZXJNYW5hZ2VtZW50LnBnYV9sb2dpbigpOwotICAg ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZih0cmFuc2FjdGlvbi5pc19uZXdfdHJhbnNhY3Rp b25fcmVxdWlyZWQoZSkpIHsKLSAgICAgICAgICAgICAgc2VsZi5zYXZlX3N0YXRlKCdfc2hvd19m aWx0ZXInLCBbXSk7Ci0gICAgICAgICAgICAgIHJldHVybiBzZWxmLmluaXRfdHJhbnNhY3Rpb24o KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIG1zZzsKLSAgICAgICAgICAgIGlm IChlLnJlYWR5U3RhdGUgPT0gMCkgewotICAgICAgICAgICAgICBtc2cgPQotICAgICAgICAgICAg ICAgIGdldHRleHQoJ05vdCBjb25uZWN0ZWQgdG8gdGhlIHNlcnZlciBvciB0aGUgY29ubmVjdGlv biB0byB0aGUgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKTsKLSAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgIG1zZyA9IGUucmVzcG9uc2VUZXh0OwotICAgICAgICAgICAgICBpZiAo ZS5yZXNwb25zZUpTT04gIT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgaWYoZS5yZXNw b25zZUpTT04uZXJyb3Jtc2cgIT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICBtc2cg PSBlLnJlc3BvbnNlSlNPTi5lcnJvcm1zZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgaWYoZS5zdGF0dXMgPT0gNTAzICYmIGUucmVzcG9uc2VKU09OLmluZm8gIT0gdW5kZWZp bmVkICYmCi0gICAgICAgICAgICAgICAgICAgIGUucmVzcG9uc2VKU09OLmluZm8gPT0gJ0NPTk5F Q1RJT05fTE9TVCcpIHsKLSAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7 Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc2F2ZV9zdGF0ZSgnX3Nob3dfZmlsdGVyJywgW10p OwotICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9jb25uZWN0aW9uX2xvc3QoZmFsc2Us IGUpOwotICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBsZXQgbXNnID0gaHR0cEVycm9ySGFu ZGxlci5oYW5kbGVRdWVyeVRvb2xBamF4RXJyb3IoCisgICAgICAgICAgICAgIHBnQWRtaW4sIHNl bGYsIGUsICdfc2hvd19maWx0ZXInLCBbXSwgdHJ1ZQorICAgICAgICAgICAgKTsKICAgICAgICAg ICAgIHNldFRpbWVvdXQoCiAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg ICAgIGFsZXJ0aWZ5LmFsZXJ0KGdldHRleHQoJ0dldCBGaWx0ZXIgRXJyb3InKSwgbXNnKTsKQEAg LTMyNTUsNDIgKzMxNDEsMTAgQEAgZGVmaW5lKCd0b29scy5xdWVyeXRvb2wnLCBbCiAgICAgICAg ICAgfSwKICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgc2VsZi50 cmlnZ2VyKCdwZ2FkbWluLXNxbGVkaXRvcjpsb2FkaW5nLWljb246aGlkZScpOwotICAgICAgICAg ICAgaWYgKHBnQWRtaW4uQnJvd3Nlci5Vc2VyTWFuYWdlbWVudC5pc19wZ2FfbG9naW5fcmVxdWly ZWQoZSkpIHsKLSAgICAgICAgICAgICAgc2VsZi5zYXZlX3N0YXRlKCdfaW5jbHVkZV9maWx0ZXIn LCBbXSk7Ci0gICAgICAgICAgICAgIHJldHVybiBwZ0FkbWluLkJyb3dzZXIuVXNlck1hbmFnZW1l bnQucGdhX2xvZ2luKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmKHRyYW5zYWN0 aW9uLmlzX25ld190cmFuc2FjdGlvbl9yZXF1aXJlZChlKSkgewotICAgICAgICAgICAgICBzZWxm LnNhdmVfc3RhdGUoJ19pbmNsdWRlX2ZpbHRlcicsIFtdKTsKLSAgICAgICAgICAgICAgcmV0dXJu IHNlbGYuaW5pdF90cmFuc2FjdGlvbigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBz ZXRUaW1lb3V0KAotICAgICAgICAgICAgICBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBp ZiAoZS5yZWFkeVN0YXRlID09IDApIHsKLSAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0 KGdldHRleHQoJ0ZpbHRlciBCeSBTZWxlY3Rpb24gRXJyb3InKSwKLSAgICAgICAgICAgICAgICAg ICAgZ2V0dGV4dCgnTm90IGNvbm5lY3RlZCB0byB0aGUgc2VydmVyIG9yIHRoZSBjb25uZWN0aW9u IHRvIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicpCi0gICAgICAgICAgICAgICAgICApOwot ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg ICAgICAgIHZhciBtc2cgPSBlLnJlc3BvbnNlVGV4dDsKLSAgICAgICAgICAgICAgICBpZiAoZS5y ZXNwb25zZUpTT04gIT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICBpZihlLnJlc3Bv bnNlSlNPTi5lcnJvcm1zZyAhPSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbXNn ID0gZS5yZXNwb25zZUpTT04uZXJyb3Jtc2c7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICBpZihlLnN0YXR1cyA9PSA1MDMgJiYgZS5yZXNwb25zZUpTT04uaW5mbyAhPSB1 bmRlZmluZWQgJiYKLSAgICAgICAgICAgICAgICAgICAgICBlLnJlc3BvbnNlSlNPTi5pbmZvID09 ICdDT05ORUNUSU9OX0xPU1QnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVu Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgc2VsZi5zYXZlX3N0YXRlKCdfaW5jbHVk ZV9maWx0ZXInLCBbXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfY29ubmVj dGlvbl9sb3N0KGZhbHNlLCBlKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgYWxlcnRpZnku YWxlcnQoZ2V0dGV4dCgnRmlsdGVyIEJ5IFNlbGVjdGlvbiBFcnJvcicpLCBtc2cpOwotICAgICAg ICAgICAgICB9LCAxMAorICAgICAgICAgICAgbGV0IG1zZyA9IGh0dHBFcnJvckhhbmRsZXIuaGFu ZGxlUXVlcnlUb29sQWpheEVycm9yKAorICAgICAgICAgICAgICBwZ0FkbWluLCBzZWxmLCBlLCAn X2luY2x1ZGVfZmlsdGVyJywgW10sIHRydWUKICAgICAgICAgICAgICk7CisgICAgICAgICAgICBh bGVydGlmeS5hbGVydChnZXR0ZXh0KCdGaWx0ZXIgQnkgU2VsZWN0aW9uIEVycm9yJyksIG1zZyk7 CiAgICAgICAgICAgfSwKICAgICAgICAgfSk7CiAgICAgICB9LApAQCAtMzM0Niw0MiArMzIwMCwx MCBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsKICAgICAgICAgICB9LAogICAgICAgICAg IGVycm9yOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3BnYWRtaW4t c3FsZWRpdG9yOmxvYWRpbmctaWNvbjpoaWRlJyk7Ci0gICAgICAgICAgICBpZiAocGdBZG1pbi5C cm93c2VyLlVzZXJNYW5hZ2VtZW50LmlzX3BnYV9sb2dpbl9yZXF1aXJlZChlKSkgewotICAgICAg ICAgICAgICBzZWxmLnNhdmVfc3RhdGUoJ19leGNsdWRlX2ZpbHRlcicsIFtdKTsKLSAgICAgICAg ICAgICAgcmV0dXJuIHBnQWRtaW4uQnJvd3Nlci5Vc2VyTWFuYWdlbWVudC5wZ2FfbG9naW4oKTsK LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYodHJhbnNhY3Rpb24uaXNfbmV3X3RyYW5z YWN0aW9uX3JlcXVpcmVkKGUpKSB7Ci0gICAgICAgICAgICAgIHNlbGYuc2F2ZV9zdGF0ZSgnX2V4 Y2x1ZGVfZmlsdGVyJywgW10pOwotICAgICAgICAgICAgICByZXR1cm4gc2VsZi5pbml0X3RyYW5z YWN0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldFRpbWVvdXQoCi0gICAg ICAgICAgICAgIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmIChlLnJlYWR5U3RhdGUg PT0gMCkgewotICAgICAgICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoZ2V0dGV4dCgnRmlsdGVy IEV4Y2x1ZGUgU2VsZWN0aW9uIEVycm9yJyksCi0gICAgICAgICAgICAgICAgICAgIGdldHRleHQo J05vdCBjb25uZWN0ZWQgdG8gdGhlIHNlcnZlciBvciB0aGUgY29ubmVjdGlvbiB0byB0aGUgc2Vy dmVyIGhhcyBiZWVuIGNsb3NlZC4nKQotICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAg ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIg bXNnID0gZS5yZXNwb25zZVRleHQ7Ci0gICAgICAgICAgICAgICAgaWYgKGUucmVzcG9uc2VKU09O ICE9IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgICAgaWYoZS5yZXNwb25zZUpTT04uZXJy b3Jtc2cgIT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1zZyA9IGUucmVzcG9u c2VKU09OLmVycm9ybXNnOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg aWYoZS5zdGF0dXMgPT0gNTAzICYmIGUucmVzcG9uc2VKU09OLmluZm8gIT0gdW5kZWZpbmVkICYm Ci0gICAgICAgICAgICAgICAgICAgICAgZS5yZXNwb25zZUpTT04uaW5mbyA9PSAnQ09OTkVDVElP Tl9MT1NUJykgewotICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewot ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2F2ZV9zdGF0ZSgnX2V4Y2x1ZGVfZmlsdGVyJywg W10pOwotICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nvbm5lY3Rpb25fbG9zdChm YWxzZSwgZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KGdldHRl eHQoJ0ZpbHRlciBFeGNsdWRlIFNlbGVjdGlvbiBFcnJvcicpLCBtc2cpOwotICAgICAgICAgICAg ICB9LCAxMAorICAgICAgICAgICAgbGV0IG1zZyA9IGh0dHBFcnJvckhhbmRsZXIuaGFuZGxlUXVl cnlUb29sQWpheEVycm9yKAorICAgICAgICAgICAgICBwZ0FkbWluLCBzZWxmLCBlLCAnX2V4Y2x1 ZGVfZmlsdGVyJywgW10sIHRydWUKICAgICAgICAgICAgICk7CisgICAgICAgICAgICBhbGVydGlm eS5hbGVydChnZXR0ZXh0KCdGaWx0ZXIgRXhjbHVkZSBTZWxlY3Rpb24gRXJyb3InKSwgbXNnKTsK ICAgICAgICAgICB9LAogICAgICAgICB9KTsKICAgICAgIH0sCkBAIC0zNDE2LDQyICszMjM4LDEw IEBAIGRlZmluZSgndG9vbHMucXVlcnl0b29sJywgWwogICAgICAgICAgIH0sCiAgICAgICAgICAg ZXJyb3I6IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgIHNlbGYudHJpZ2dlcigncGdhZG1pbi1z cWxlZGl0b3I6bG9hZGluZy1pY29uOmhpZGUnKTsKLSAgICAgICAgICAgIGlmIChwZ0FkbWluLkJy b3dzZXIuVXNlck1hbmFnZW1lbnQuaXNfcGdhX2xvZ2luX3JlcXVpcmVkKGUpKSB7Ci0gICAgICAg ICAgICAgIHNlbGYuc2F2ZV9zdGF0ZSgnX3JlbW92ZV9maWx0ZXInLCBbXSk7Ci0gICAgICAgICAg ICAgIHJldHVybiBwZ0FkbWluLkJyb3dzZXIuVXNlck1hbmFnZW1lbnQucGdhX2xvZ2luKCk7Ci0g ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmKHRyYW5zYWN0aW9uLmlzX25ld190cmFuc2Fj dGlvbl9yZXF1aXJlZChlKSkgewotICAgICAgICAgICAgICBzZWxmLnNhdmVfc3RhdGUoJ19yZW1v dmVfZmlsdGVyJywgW10pOwotICAgICAgICAgICAgICByZXR1cm4gc2VsZi5pbml0X3RyYW5zYWN0 aW9uKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldFRpbWVvdXQoCi0gICAgICAg ICAgICAgIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmIChlLnJlYWR5U3RhdGUgPT0g MCkgewotICAgICAgICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoZ2V0dGV4dCgnUmVtb3ZlIEZp bHRlciBFcnJvcicpLAotICAgICAgICAgICAgICAgICAgICBnZXR0ZXh0KCdOb3QgY29ubmVjdGVk IHRvIHRoZSBzZXJ2ZXIgb3IgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciBoYXMgYmVlbiBj bG9zZWQuJykKLSAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm47 Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIG1zZyA9IGUucmVzcG9u c2VUZXh0OwotICAgICAgICAgICAgICAgIGlmIChlLnJlc3BvbnNlSlNPTiAhPSB1bmRlZmluZWQp IHsKLSAgICAgICAgICAgICAgICAgIGlmKGUucmVzcG9uc2VKU09OLmVycm9ybXNnICE9IHVuZGVm aW5lZCkgewotICAgICAgICAgICAgICAgICAgICBtc2cgPSBlLnJlc3BvbnNlSlNPTi5lcnJvcm1z ZzsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGlmKGUuc3RhdHVzID09 IDUwMyAmJiBlLnJlc3BvbnNlSlNPTi5pbmZvICE9IHVuZGVmaW5lZCAmJgotICAgICAgICAgICAg ICAgICAgICAgIGUucmVzcG9uc2VKU09OLmluZm8gPT0gJ0NPTk5FQ1RJT05fTE9TVCcpIHsKLSAg ICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg ICAgICAgICBzZWxmLnNhdmVfc3RhdGUoJ19yZW1vdmVfZmlsdGVyJywgW10pOwotICAgICAgICAg ICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nvbm5lY3Rpb25fbG9zdChmYWxzZSwgZSk7Ci0gICAg ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IH0KLQotICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KGdldHRleHQoJ1JlbW92ZSBGaWx0 ZXIgRXJyb3InKSwgbXNnKTsKLSAgICAgICAgICAgICAgfQorICAgICAgICAgICAgbGV0IG1zZyA9 IGh0dHBFcnJvckhhbmRsZXIuaGFuZGxlUXVlcnlUb29sQWpheEVycm9yKAorICAgICAgICAgICAg ICBwZ0FkbWluLCBzZWxmLCBlLCAnX3JlbW92ZV9maWx0ZXInLCBbXSwgdHJ1ZQogICAgICAgICAg ICAgKTsKKyAgICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KGdldHRleHQoJ1JlbW92ZSBGaWx0ZXIg RXJyb3InKSwgbXNnKTsKICAgICAgICAgICB9LAogICAgICAgICB9KTsKICAgICAgIH0sCkBAIC0z NDkxLDQyICszMjgxLDEwIEBAIGRlZmluZSgndG9vbHMucXVlcnl0b29sJywgWwogICAgICAgICAg IH0sCiAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgIHNlbGYudHJp Z2dlcigncGdhZG1pbi1zcWxlZGl0b3I6bG9hZGluZy1pY29uOmhpZGUnKTsKLSAgICAgICAgICAg IGlmIChwZ0FkbWluLkJyb3dzZXIuVXNlck1hbmFnZW1lbnQuaXNfcGdhX2xvZ2luX3JlcXVpcmVk KGUpKSB7Ci0gICAgICAgICAgICAgIHNlbGYuc2F2ZV9zdGF0ZSgnX2FwcGx5X2ZpbHRlcicsIFtd KTsKLSAgICAgICAgICAgICAgcmV0dXJuIHBnQWRtaW4uQnJvd3Nlci5Vc2VyTWFuYWdlbWVudC5w Z2FfbG9naW4oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYodHJhbnNhY3Rpb24u aXNfbmV3X3RyYW5zYWN0aW9uX3JlcXVpcmVkKGUpKSB7Ci0gICAgICAgICAgICAgIHNlbGYuc2F2 ZV9zdGF0ZSgnX2FwcGx5X2ZpbHRlcicsIFtdKTsKLSAgICAgICAgICAgICAgcmV0dXJuIHNlbGYu aW5pdF90cmFuc2FjdGlvbigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzZXRUaW1l b3V0KAotICAgICAgICAgICAgICBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAoZS5y ZWFkeVN0YXRlID09IDApIHsKLSAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KGdldHRl eHQoJ0FwcGx5IEZpbHRlciBFcnJvcicpLAotICAgICAgICAgICAgICAgICAgICBnZXR0ZXh0KCdO b3QgY29ubmVjdGVkIHRvIHRoZSBzZXJ2ZXIgb3IgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZl ciBoYXMgYmVlbiBjbG9zZWQuJykKLSAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAg ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIG1z ZyA9IGUucmVzcG9uc2VUZXh0OwotICAgICAgICAgICAgICAgIGlmIChlLnJlc3BvbnNlSlNPTiAh PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAgIGlmKGUucmVzcG9uc2VKU09OLmVycm9y bXNnICE9IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgICAgICBtc2cgPSBlLnJlc3BvbnNl SlNPTi5lcnJvcm1zZzsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGlm KGUuc3RhdHVzID09IDUwMyAmJiBlLnJlc3BvbnNlSlNPTi5pbmZvICE9IHVuZGVmaW5lZCAmJgot ICAgICAgICAgICAgICAgICAgICAgIGUucmVzcG9uc2VKU09OLmluZm8gPT0gJ0NPTk5FQ1RJT05f TE9TVCcpIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAg ICAgICAgICAgICAgICAgICAgICBzZWxmLnNhdmVfc3RhdGUoJ19hcHBseV9maWx0ZXInLCBbXSk7 Ci0gICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfY29ubmVjdGlvbl9sb3N0KGZhbHNl LCBlKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoZ2V0dGV4dCgn QXBwbHkgRmlsdGVyIEVycm9yJyksIG1zZyk7Ci0gICAgICAgICAgICAgIH0sIDEwCisgICAgICAg ICAgICBsZXQgbXNnID0gaHR0cEVycm9ySGFuZGxlci5oYW5kbGVRdWVyeVRvb2xBamF4RXJyb3Io CisgICAgICAgICAgICAgIHBnQWRtaW4sIHNlbGYsIGUsICdfYXBwbHlfZmlsdGVyJywgW10sIHRy dWUKICAgICAgICAgICAgICk7CisgICAgICAgICAgICBhbGVydGlmeS5hbGVydChnZXR0ZXh0KCdB cHBseSBGaWx0ZXIgRXJyb3InKSwgbXNnKTsKICAgICAgICAgICB9LAogICAgICAgICB9KTsKICAg ICAgIH0sCkBAIC0zNjQ2LDQyICszNDA0LDEwIEBAIGRlZmluZSgndG9vbHMucXVlcnl0b29sJywg WwogICAgICAgICAgIH0sCiAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKICAgICAgICAg ICAgIHNlbGYudHJpZ2dlcigncGdhZG1pbi1zcWxlZGl0b3I6bG9hZGluZy1pY29uOmhpZGUnKTsK LSAgICAgICAgICAgIGlmIChwZ0FkbWluLkJyb3dzZXIuVXNlck1hbmFnZW1lbnQuaXNfcGdhX2xv Z2luX3JlcXVpcmVkKGUpKSB7Ci0gICAgICAgICAgICAgIHNlbGYuc2F2ZV9zdGF0ZSgnX3NldF9s aW1pdCcsIFtdKTsKLSAgICAgICAgICAgICAgcmV0dXJuIHBnQWRtaW4uQnJvd3Nlci5Vc2VyTWFu YWdlbWVudC5wZ2FfbG9naW4oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYodHJh bnNhY3Rpb24uaXNfbmV3X3RyYW5zYWN0aW9uX3JlcXVpcmVkKGUpKSB7Ci0gICAgICAgICAgICAg IHNlbGYuc2F2ZV9zdGF0ZSgnX3NldF9saW1pdCcsIFtdKTsKLSAgICAgICAgICAgICAgcmV0dXJu IHNlbGYuaW5pdF90cmFuc2FjdGlvbigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBz ZXRUaW1lb3V0KAotICAgICAgICAgICAgICBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBp ZiAoZS5yZWFkeVN0YXRlID09IDApIHsKLSAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0 KGdldHRleHQoJ0NoYW5nZSBsaW1pdCBFcnJvcicpLAotICAgICAgICAgICAgICAgICAgICBnZXR0 ZXh0KCdOb3QgY29ubmVjdGVkIHRvIHRoZSBzZXJ2ZXIgb3IgdGhlIGNvbm5lY3Rpb24gdG8gdGhl IHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuJykKLSAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAg ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg dmFyIG1zZyA9IGUucmVzcG9uc2VUZXh0OwotICAgICAgICAgICAgICAgIGlmIChlLnJlc3BvbnNl SlNPTiAhPSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAgIGlmKGUucmVzcG9uc2VKU09O LmVycm9ybXNnICE9IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgICAgICBtc2cgPSBlLnJl c3BvbnNlSlNPTi5lcnJvcm1zZzsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgIGlmKGUuc3RhdHVzID09IDUwMyAmJiBlLnJlc3BvbnNlSlNPTi5pbmZvICE9IHVuZGVmaW5l ZCAmJgotICAgICAgICAgICAgICAgICAgICAgIGUucmVzcG9uc2VKU09OLmluZm8gPT0gJ0NPTk5F Q1RJT05fTE9TVCcpIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigp IHsKLSAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNhdmVfc3RhdGUoJ19zZXRfbGltaXQnLCBb XSk7Ci0gICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfY29ubmVjdGlvbl9sb3N0KGZh bHNlLCBlKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoZ2V0dGV4 dCgnQ2hhbmdlIGxpbWl0IEVycm9yJyksIG1zZyk7Ci0gICAgICAgICAgICAgIH0sIDEwCisgICAg ICAgICAgICBsZXQgbXNnID0gaHR0cEVycm9ySGFuZGxlci5oYW5kbGVRdWVyeVRvb2xBamF4RXJy b3IoCisgICAgICAgICAgICAgIHBnQWRtaW4sIHNlbGYsIGUsICdfc2V0X2xpbWl0JywgW10sIHRy dWUKICAgICAgICAgICAgICk7CisgICAgICAgICAgICBhbGVydGlmeS5hbGVydChnZXR0ZXh0KCdD aGFuZ2UgbGltaXQgRXJyb3InKSwgbXNnKTsKICAgICAgICAgICB9LAogICAgICAgICB9KTsKICAg ICAgIH0sCkBAIC0zODA1LDIzICszNTMxLDkgQEAgZGVmaW5lKCd0b29scy5xdWVyeXRvb2wnLCBb CiAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgIHNlbGYuZGlzYWJs ZV90b29sX2J1dHRvbnMoZmFsc2UpOwogCi0gICAgICAgICAgICBpZiAoZS5yZWFkeVN0YXRlID09 IDApIHsKLSAgICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoZ2V0dGV4dCgnQ2FuY2VsIFF1ZXJ5 IEVycm9yJyksCi0gICAgICAgICAgICAgICAgZ2V0dGV4dCgnTm90IGNvbm5lY3RlZCB0byB0aGUg c2VydmVyIG9yIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicp Ci0gICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K LQotICAgICAgICAgICAgaWYgKHBnQWRtaW4uQnJvd3Nlci5Vc2VyTWFuYWdlbWVudC5pc19wZ2Ff bG9naW5fcmVxdWlyZWQoZSkpIHsKLSAgICAgICAgICAgICAgc2VsZi5zYXZlX3N0YXRlKCdfY2Fu Y2VsX3F1ZXJ5JywgW10pOwotICAgICAgICAgICAgICByZXR1cm4gcGdBZG1pbi5Ccm93c2VyLlVz ZXJNYW5hZ2VtZW50LnBnYV9sb2dpbigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2 YXIgbXNnID0gZS5yZXNwb25zZVRleHQ7Ci0gICAgICAgICAgICBpZiAoZS5yZXNwb25zZUpTT04g IT0gdW5kZWZpbmVkICYmCi0gICAgICAgICAgICAgIGUucmVzcG9uc2VKU09OLmVycm9ybXNnICE9 IHVuZGVmaW5lZCkKLSAgICAgICAgICAgICAgbXNnID0gZS5yZXNwb25zZUpTT04uZXJyb3Jtc2c7 Ci0KKyAgICAgICAgICAgIGxldCBtc2cgPSBodHRwRXJyb3JIYW5kbGVyLmhhbmRsZVF1ZXJ5VG9v bEFqYXhFcnJvcigKKyAgICAgICAgICAgICAgcGdBZG1pbiwgc2VsZiwgZSwgJ19jYW5jZWxfcXVl cnknLCBbXSwgZmFsc2UKKyAgICAgICAgICAgICk7CiAgICAgICAgICAgICBhbGVydGlmeS5hbGVy dChnZXR0ZXh0KCdDYW5jZWwgUXVlcnkgRXJyb3InKSwgbXNnKTsKICAgICAgICAgICB9LAogICAg ICAgICB9KTsKQEAgLTM4NjYsMzggKzM1NzgsMTAgQEAgZGVmaW5lKCd0b29scy5xdWVyeXRvb2wn LCBbCiAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KGdldHRleHQoJ0F1dG8gUm9sbGJhY2sg RXJyb3InKSwgcmVzLmRhdGEucmVzdWx0KTsKICAgICAgICAgICB9LAogICAgICAgICAgIGVycm9y OiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICBpZiAoZS5yZWFkeVN0YXRlID09IDApIHsKLSAg ICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoZ2V0dGV4dCgnQXV0byBSb2xsYmFjayBFcnJvcicp LAotICAgICAgICAgICAgICAgIGdldHRleHQoJ05vdCBjb25uZWN0ZWQgdG8gdGhlIHNlcnZlciBv ciB0aGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKQotICAgICAg ICAgICAgICApOwotICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg ICAgICAgIGlmIChwZ0FkbWluLkJyb3dzZXIuVXNlck1hbmFnZW1lbnQuaXNfcGdhX2xvZ2luX3Jl cXVpcmVkKGUpKSB7Ci0gICAgICAgICAgICAgIHNlbGYuc2F2ZV9zdGF0ZSgnX2F1dG9fcm9sbGJh Y2snLCBbXSk7Ci0gICAgICAgICAgICAgIHJldHVybiBwZ0FkbWluLkJyb3dzZXIuVXNlck1hbmFn ZW1lbnQucGdhX2xvZ2luKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmKHRyYW5z YWN0aW9uLmlzX25ld190cmFuc2FjdGlvbl9yZXF1aXJlZChlKSkgewotICAgICAgICAgICAgICBz ZWxmLnNhdmVfc3RhdGUoJ19hdXRvX3JvbGxiYWNrJywgW10pOwotICAgICAgICAgICAgICBzZWxm LmluaXRfdHJhbnNhY3Rpb24oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIG1z ZyA9IGUucmVzcG9uc2VUZXh0OwotICAgICAgICAgICAgaWYgKGUucmVzcG9uc2VKU09OICE9IHVu ZGVmaW5lZCkgewotICAgICAgICAgICAgICBpZihlLnJlc3BvbnNlSlNPTi5lcnJvcm1zZyAhPSB1 bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICBtc2cgPSBlLnJlc3BvbnNlSlNPTi5lcnJvcm1z ZzsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGlmKGUuc3RhdHVzID09IDUwMyAm JiBlLnJlc3BvbnNlSlNPTi5pbmZvICE9IHVuZGVmaW5lZCAmJgotICAgICAgICAgICAgICAgICAg ZS5yZXNwb25zZUpTT04uaW5mbyA9PSAnQ09OTkVDVElPTl9MT1NUJykgewotICAgICAgICAgICAg ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICBzZWxmLnNhdmVf c3RhdGUoJ19hdXRvX3JvbGxiYWNrJywgW10pOwotICAgICAgICAgICAgICAgICAgc2VsZi5oYW5k bGVfY29ubmVjdGlvbl9sb3N0KGZhbHNlLCBlKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQogCisgICAgICAgICAgICBsZXQgbXNnID0gaHR0cEVy cm9ySGFuZGxlci5oYW5kbGVRdWVyeVRvb2xBamF4RXJyb3IoCisgICAgICAgICAgICAgIHBnQWRt aW4sIHNlbGYsIGUsICdfYXV0b19yb2xsYmFjaycsIFtdLCB0cnVlCisgICAgICAgICAgICApOwog ICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoZ2V0dGV4dCgnQXV0byBSb2xsYmFjayBFcnJvcicp LCBtc2cpOwogICAgICAgICAgIH0sCiAgICAgICAgIH0pOwpAQCAtMzkyNywzOCArMzYxMSw5IEBA IGRlZmluZSgndG9vbHMucXVlcnl0b29sJywgWwogICAgICAgICAgICAgICBhbGVydGlmeS5hbGVy dChnZXR0ZXh0KCdBdXRvIENvbW1pdCBFcnJvcicpLCByZXMuZGF0YS5yZXN1bHQpOwogICAgICAg ICAgIH0sCiAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIGlmIChl LnJlYWR5U3RhdGUgPT0gMCkgewotICAgICAgICAgICAgICBhbGVydGlmeS5hbGVydChnZXR0ZXh0 KCdBdXRvIENvbW1pdCBFcnJvcicpLAotICAgICAgICAgICAgICAgIGdldHRleHQoJ05vdCBjb25u ZWN0ZWQgdG8gdGhlIHNlcnZlciBvciB0aGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIGhhcyBi ZWVuIGNsb3NlZC4nKQotICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICByZXR1cm47Ci0g ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChwZ0FkbWluLkJyb3dzZXIuVXNlck1hbmFn ZW1lbnQuaXNfcGdhX2xvZ2luX3JlcXVpcmVkKGUpKSB7Ci0gICAgICAgICAgICAgIHNlbGYuc2F2 ZV9zdGF0ZSgnX2F1dG9fY29tbWl0JywgW10pOwotICAgICAgICAgICAgICByZXR1cm4gcGdBZG1p bi5Ccm93c2VyLlVzZXJNYW5hZ2VtZW50LnBnYV9sb2dpbigpOwotICAgICAgICAgICAgfQotCi0g ICAgICAgICAgICBpZih0cmFuc2FjdGlvbi5pc19uZXdfdHJhbnNhY3Rpb25fcmVxdWlyZWQoZSkp IHsKLSAgICAgICAgICAgICAgc2VsZi5zYXZlX3N0YXRlKCdfYXV0b19jb21taXQnLCBbXSk7Ci0g ICAgICAgICAgICAgIHJldHVybiBzZWxmLmluaXRfdHJhbnNhY3Rpb24oKTsKLSAgICAgICAgICAg IH0KLQotICAgICAgICAgICAgdmFyIG1zZyA9IGUucmVzcG9uc2VUZXh0OwotICAgICAgICAgICAg aWYgKGUucmVzcG9uc2VKU09OICE9IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICBpZihlLnJl c3BvbnNlSlNPTi5lcnJvcm1zZyAhPSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICBtc2cg PSBlLnJlc3BvbnNlSlNPTi5lcnJvcm1zZzsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg ICAgIGlmKGUuc3RhdHVzID09IDUwMyAmJiBlLnJlc3BvbnNlSlNPTi5pbmZvICE9IHVuZGVmaW5l ZCAmJgotICAgICAgICAgICAgICAgICAgZS5yZXNwb25zZUpTT04uaW5mbyA9PSAnQ09OTkVDVElP Tl9MT1NUJykgewotICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAg ICAgICAgICAgICAgICBzZWxmLnNhdmVfc3RhdGUoJ19hdXRvX2NvbW1pdCcsIFtdKTsKLSAgICAg ICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nvbm5lY3Rpb25fbG9zdChmYWxzZSwgZSk7Ci0gICAg ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQorICAgICAg ICAgICAgbGV0IG1zZyA9IGh0dHBFcnJvckhhbmRsZXIuaGFuZGxlUXVlcnlUb29sQWpheEVycm9y KAorICAgICAgICAgICAgICBwZ0FkbWluLCBzZWxmLCBlLCAnX2F1dG9fY29tbWl0JywgW10sIHRy dWUKKyAgICAgICAgICAgICk7CiAgICAgICAgICAgICBhbGVydGlmeS5hbGVydChnZXR0ZXh0KCdB dXRvIENvbW1pdCBFcnJvcicpLCBtc2cpOwogICAgICAgICAgIH0sCiAgICAgICAgIH0pOwpAQCAt Mzk5NSwyMSArMzY1MCwxMCBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsKICAgICAgICAg ICAgIH0KICAgICAgICAgICB9LAogICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihlKSB7Ci0KLSAg ICAgICAgICAgIGlmIChwZ0FkbWluLkJyb3dzZXIuVXNlck1hbmFnZW1lbnQuaXNfcGdhX2xvZ2lu X3JlcXVpcmVkKGUpKSB7Ci0gICAgICAgICAgICAgIHNlbGYuc2F2ZV9zdGF0ZSgnX2V4cGxhaW5f dmVyYm9zZScsIFtdKTsKLSAgICAgICAgICAgICAgcmV0dXJuIHBnQWRtaW4uQnJvd3Nlci5Vc2Vy TWFuYWdlbWVudC5wZ2FfbG9naW4oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYo dHJhbnNhY3Rpb24uaXNfbmV3X3RyYW5zYWN0aW9uX3JlcXVpcmVkKGUpKSB7Ci0gICAgICAgICAg ICAgIHNlbGYuc2F2ZV9zdGF0ZSgnX2V4cGxhaW5fdmVyYm9zZScsIFtdKTsKLSAgICAgICAgICAg ICAgcmV0dXJuIHNlbGYuaW5pdF90cmFuc2FjdGlvbigpOwotICAgICAgICAgICAgfQotCi0gICAg ICAgICAgICBhbGVydGlmeS5hbGVydChnZXR0ZXh0KCdFeHBsYWluIG9wdGlvbnMgZXJyb3InKSwK LSAgICAgICAgICAgICAgZ2V0dGV4dCgnRXJyb3Igb2NjdXJyZWQgd2hpbGUgc2V0dGluZyB2ZXJi b3NlIG9wdGlvbiBpbiBleHBsYWluLicpCisgICAgICAgICAgICBsZXQgbXNnID0gaHR0cEVycm9y SGFuZGxlci5oYW5kbGVRdWVyeVRvb2xBamF4RXJyb3IoCisgICAgICAgICAgICAgIHBnQWRtaW4s IHNlbGYsIGUsICdfZXhwbGFpbl92ZXJib3NlJywgW10sIHRydWUKICAgICAgICAgICAgICk7Ci0g ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBhbGVydGlmeS5hbGVydChnZXR0ZXh0KCdF eHBsYWluIG9wdGlvbnMgZXJyb3InKSwgbXNnKTsKICAgICAgICAgICB9LAogICAgICAgICB9KTsK ICAgICAgIH0sCkBAIC00MDQ1LDE5ICszNjg5LDEwIEBAIGRlZmluZSgndG9vbHMucXVlcnl0b29s JywgWwogICAgICAgICAgICAgfQogICAgICAgICAgIH0sCiAgICAgICAgICAgZXJyb3I6IGZ1bmN0 aW9uKGUpIHsKLSAgICAgICAgICAgIGlmIChwZ0FkbWluLkJyb3dzZXIuVXNlck1hbmFnZW1lbnQu aXNfcGdhX2xvZ2luX3JlcXVpcmVkKGUpKSB7Ci0gICAgICAgICAgICAgIHNlbGYuc2F2ZV9zdGF0 ZSgnX2V4cGxhaW5fY29zdHMnLCBbXSk7Ci0gICAgICAgICAgICAgIHJldHVybiBwZ0FkbWluLkJy b3dzZXIuVXNlck1hbmFnZW1lbnQucGdhX2xvZ2luKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg ICAgICAgIGlmKHRyYW5zYWN0aW9uLmlzX25ld190cmFuc2FjdGlvbl9yZXF1aXJlZChlKSkgewot ICAgICAgICAgICAgICBzZWxmLnNhdmVfc3RhdGUoJ19leHBsYWluX2Nvc3RzJywgW10pOwotICAg ICAgICAgICAgICByZXR1cm4gc2VsZi5pbml0X3RyYW5zYWN0aW9uKCk7Ci0gICAgICAgICAgICB9 Ci0KLSAgICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KGdldHRleHQoJ0V4cGxhaW4gb3B0aW9ucyBl cnJvcicpLAotICAgICAgICAgICAgICBnZXR0ZXh0KCdFcnJvciBvY2N1cnJlZCB3aGlsZSBzZXR0 aW5nIGNvc3RzIG9wdGlvbiBpbiBleHBsYWluLicpCisgICAgICAgICAgICBsZXQgbXNnID0gaHR0 cEVycm9ySGFuZGxlci5oYW5kbGVRdWVyeVRvb2xBamF4RXJyb3IoCisgICAgICAgICAgICAgIHBn QWRtaW4sIHNlbGYsIGUsICdfZXhwbGFpbl9jb3N0cycsIFtdLCB0cnVlCiAgICAgICAgICAgICAp OworICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoZ2V0dGV4dCgnRXhwbGFpbiBvcHRpb25zIGVy cm9yJyksIG1zZyk7CiAgICAgICAgICAgfSwKICAgICAgICAgfSk7CiAgICAgICB9LApAQCAtNDA5 MywxOSArMzcyOCwxMCBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsKICAgICAgICAgICAg IH0KICAgICAgICAgICB9LAogICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihlKSB7Ci0gICAgICAg ICAgICBpZiAocGdBZG1pbi5Ccm93c2VyLlVzZXJNYW5hZ2VtZW50LmlzX3BnYV9sb2dpbl9yZXF1 aXJlZChlKSkgewotICAgICAgICAgICAgICBzZWxmLnNhdmVfc3RhdGUoJ19leHBsYWluX2J1ZmZl cnMnLCBbXSk7Ci0gICAgICAgICAgICAgIHJldHVybiBwZ0FkbWluLkJyb3dzZXIuVXNlck1hbmFn ZW1lbnQucGdhX2xvZ2luKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmKHRyYW5z YWN0aW9uLmlzX25ld190cmFuc2FjdGlvbl9yZXF1aXJlZChlKSkgewotICAgICAgICAgICAgICBz ZWxmLnNhdmVfc3RhdGUoJ19leHBsYWluX2J1ZmZlcnMnLCBbXSk7Ci0gICAgICAgICAgICAgIHJl dHVybiBzZWxmLmluaXRfdHJhbnNhY3Rpb24oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg ICAgYWxlcnRpZnkuYWxlcnQoZ2V0dGV4dCgnRXhwbGFpbiBvcHRpb25zIGVycm9yJyksCi0gICAg ICAgICAgICAgIGdldHRleHQoJ0Vycm9yIG9jY3VycmVkIHdoaWxlIHNldHRpbmcgYnVmZmVycyBv cHRpb24gaW4gZXhwbGFpbi4nKQorICAgICAgICAgICAgbGV0IG1zZyA9IGh0dHBFcnJvckhhbmRs ZXIuaGFuZGxlUXVlcnlUb29sQWpheEVycm9yKAorICAgICAgICAgICAgICBwZ0FkbWluLCBzZWxm LCBlLCAnX2V4cGxhaW5fYnVmZmVycycsIFtdLCB0cnVlCiAgICAgICAgICAgICApOworICAgICAg ICAgICAgYWxlcnRpZnkuYWxlcnQoZ2V0dGV4dCgnRXhwbGFpbiBvcHRpb25zIGVycm9yJyksIG1z Zyk7CiAgICAgICAgICAgfSwKICAgICAgICAgfSk7CiAgICAgICB9LApAQCAtNDE0MCwxOSArMzc2 NiwxMCBAQCBkZWZpbmUoJ3Rvb2xzLnF1ZXJ5dG9vbCcsIFsKICAgICAgICAgICAgIH0KICAgICAg ICAgICB9LAogICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICBpZiAo cGdBZG1pbi5Ccm93c2VyLlVzZXJNYW5hZ2VtZW50LmlzX3BnYV9sb2dpbl9yZXF1aXJlZChlKSkg ewotICAgICAgICAgICAgICBzZWxmLnNhdmVfc3RhdGUoJ19leHBsYWluX3RpbWluZycsIFtdKTsK LSAgICAgICAgICAgICAgcmV0dXJuIHBnQWRtaW4uQnJvd3Nlci5Vc2VyTWFuYWdlbWVudC5wZ2Ff bG9naW4oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYodHJhbnNhY3Rpb24uaXNf bmV3X3RyYW5zYWN0aW9uX3JlcXVpcmVkKGUpKSB7Ci0gICAgICAgICAgICAgIHNlbGYuc2F2ZV9z dGF0ZSgnX2V4cGxhaW5fdGltaW5nJywgW10pOwotICAgICAgICAgICAgICByZXR1cm4gc2VsZi5p bml0X3RyYW5zYWN0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGFsZXJ0aWZ5 LmFsZXJ0KGdldHRleHQoJ0V4cGxhaW4gb3B0aW9ucyBlcnJvcicpLAotICAgICAgICAgICAgICBn ZXR0ZXh0KCdFcnJvciBvY2N1cnJlZCB3aGlsZSBzZXR0aW5nIHRpbWluZyBvcHRpb24gaW4gZXhw bGFpbi4nKQorICAgICAgICAgICAgbGV0IG1zZyA9IGh0dHBFcnJvckhhbmRsZXIuaGFuZGxlUXVl cnlUb29sQWpheEVycm9yKAorICAgICAgICAgICAgICBwZ0FkbWluLCBzZWxmLCBlLCAnX2V4cGxh aW5fdGltaW5nJywgW10sIHRydWUKICAgICAgICAgICAgICk7CisgICAgICAgICAgICBhbGVydGlm eS5hbGVydChnZXR0ZXh0KCdFeHBsYWluIG9wdGlvbnMgZXJyb3InKSwgbXNnKTsKICAgICAgICAg ICB9LAogICAgICAgICB9KTsKICAgICAgIH0sCkBAIC00MjU0LDI4ICszODcxLDE4IEBAIGRlZmlu ZSgndG9vbHMucXVlcnl0b29sJywgWwogICAgICAgICAgICAgfQogICAgICAgICAgIH0sCiAgICAg ICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIGlmIChwZ0FkbWluLkJyb3dz ZXIuVXNlck1hbmFnZW1lbnQuaXNfcGdhX2xvZ2luX3JlcXVpcmVkKGUpKSB7Ci0gICAgICAgICAg ICAgIHNlbGYuc2F2ZV9zdGF0ZSgnZ2V0X3ByZWZlcmVuY2VzJywgW10pOwotICAgICAgICAgICAg ICByZXR1cm4gcGdBZG1pbi5Ccm93c2VyLlVzZXJNYW5hZ2VtZW50LnBnYV9sb2dpbigpOwotICAg ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZih0cmFuc2FjdGlvbi5pc19uZXdfdHJhbnNhY3Rp b25fcmVxdWlyZWQoZSkpIHsKLSAgICAgICAgICAgICAgc2VsZi5zYXZlX3N0YXRlKCdnZXRfcHJl ZmVyZW5jZXMnLCBbXSk7Ci0gICAgICAgICAgICAgIHJldHVybiBzZWxmLmluaXRfdHJhbnNhY3Rp b24oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdXBkYXRlVUkoKTsKLSAgICAgICAg ICAgIGFsZXJ0aWZ5LmFsZXJ0KAotICAgICAgICAgICAgICBnZXR0ZXh0KCdHZXQgUHJlZmVyZW5j ZXMgZXJyb3InKSwKLSAgICAgICAgICAgICAgZ2V0dGV4dCgnRXJyb3Igb2NjdXJyZWQgd2hpbGUg Z2V0dGluZyBxdWVyeSB0b29sIG9wdGlvbnMuJykKKyAgICAgICAgICAgIGxldCBtc2cgPSBodHRw RXJyb3JIYW5kbGVyLmhhbmRsZVF1ZXJ5VG9vbEFqYXhFcnJvcigKKyAgICAgICAgICAgICAgcGdB ZG1pbiwgc2VsZiwgZSwgJ2dldF9wcmVmZXJlbmNlcycsIFtdLCB0cnVlCiAgICAgICAgICAgICAp OworICAgICAgICAgICAgdXBkYXRlVUkoKTsKKyAgICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KGdl dHRleHQoJ0dldCBQcmVmZXJlbmNlcyBlcnJvcicpLCBtc2cpOwogICAgICAgICAgIH0sCiAgICAg ICAgIH0pOwogICAgICAgfSwKICAgICAgIGNsb3NlOiBmdW5jdGlvbigpIHsKICAgICAgICAgdmFy IHNlbGYgPSB0aGlzOwogCi0gICAgICAgIHBnQnJvd3Nlci5FdmVudHMub2ZmKCdwZ2FkbWluOnVz ZXI6bG9nZ2VkLWluJywgdGhpcy5pbml0X3RyYW5zYWN0aW9uKTsKKyAgICAgICAgcGdCcm93c2Vy LkV2ZW50cy5vZmYoJ3BnYWRtaW46dXNlcjpsb2dnZWQtaW4nLCB0aGlzLmluaXRUcmFuc2FjdGlv bik7CiAgICAgICAgIF8uZWFjaCh3aW5kb3cudG9wLnBnQWRtaW4uQnJvd3Nlci5kb2NrZXIuZmlu ZFBhbmVscygnZnJtX2RhdGFncmlkJyksIGZ1bmN0aW9uKHBhbmVsKSB7CiAgICAgICAgICAgaWYg KHBhbmVsLmlzVmlzaWJsZSgpKSB7CiAgICAgICAgICAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQg PSBudWxsOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvdXNlcl9tYW5hZ2VtZW50L3N0 YXRpYy9qcy91c2VyX21hbmFnZW1lbnQuanMgYi93ZWIvcGdhZG1pbi90b29scy91c2VyX21hbmFn ZW1lbnQvc3RhdGljL2pzL3VzZXJfbWFuYWdlbWVudC5qcwppbmRleCAyNjI3MzI4Li5kY2Y2NWNi IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi90b29scy91c2VyX21hbmFnZW1lbnQvc3RhdGljL2pz L3VzZXJfbWFuYWdlbWVudC5qcworKysgYi93ZWIvcGdhZG1pbi90b29scy91c2VyX21hbmFnZW1l bnQvc3RhdGljL2pzL3VzZXJfbWFuYWdlbWVudC5qcwpAQCAtMTI5LDcgKzEyOSw3IEBAIGRlZmlu ZShbCiAgICAgICBhbGVydGlmeS5DaGFuZ2VQYXNzd29yZCh0aXRsZSwgdXJsKS5yZXNpemVUbygn NzUlJywgJzcwJScpOwogICAgIH0sCiAKLSAgICBpc19wZ2FfbG9naW5fcmVxdWlyZWQoeGhyKSB7 CisgICAgaXNQZ2FMb2dpblJlcXVpcmVkKHhocikgewogICAgICAgLyogSWYgcmVzcG9uc2VKU09O IGlzIHVuZGVmaW5lZCB0aGVuIGl0IGNvdWxkIGJlIG9iamVjdCBvZgogICAgICAgICogYXhpb3Mo UHJvbWlzZSBIVFRQKSByZXNwb25zZSwgc28gd2Ugc2hvdWxkIGNoZWNrIGFjY29yZGluZ2x5Lgog ICAgICAgICovCkBAIC0xNDUsNyArMTQ1LDcgQEAgZGVmaW5lKFsKICAgICB9LAogCiAgICAgLy8g Q2FsbGJhY2sgdG8gZHJhdyBwZ0FkbWluNCBsb2dpbiBkaWFsb2cuCi0gICAgcGdhX2xvZ2luOiBm dW5jdGlvbih1cmwpIHsKKyAgICBwZ2FMb2dpbjogZnVuY3Rpb24odXJsKSB7CiAgICAgICB2YXIg dGl0bGUgPSBnZXR0ZXh0KCdwZ0FkbWluIDQgbG9naW4nKTsKICAgICAgIHVybCA9IHVybCB8fCB1 cmxfZm9yKCdzZWN1cml0eS5sb2dpbicpOwogICAgICAgaWYoIWFsZXJ0aWZ5LlBnYUxvZ2luKSB7 CmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3NxbGVkaXRvci9leGVjdXRl X3F1ZXJ5X3NwZWMuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3NxbGVkaXRvci9leGVj dXRlX3F1ZXJ5X3NwZWMuanMKaW5kZXggNWY5MmRjNS4uMDZmZWZmZiAxMDA2NDQKLS0tIGEvd2Vi L3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9zcWxlZGl0b3IvZXhlY3V0ZV9xdWVyeV9zcGVjLmpzCisr KyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc3FsZWRpdG9yL2V4ZWN1dGVfcXVlcnlfc3Bl Yy5qcwpAQCAtOCw3ICs4LDcgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIGltcG9ydCAqIGFzIHN1 YmplY3QgZnJvbSAnc291cmNlcy9zcWxlZGl0b3IvZXhlY3V0ZV9xdWVyeSc7Ci1pbXBvcnQgKiBh cyB0cmFuc2FjdGlvbiBmcm9tICdzb3VyY2VzL3NxbGVkaXRvci9pc19uZXdfdHJhbnNhY3Rpb25f cmVxdWlyZWQnOworaW1wb3J0ICogYXMgaHR0cEVycm9ySGFuZGxlciBmcm9tICdzb3VyY2VzL3Nx bGVkaXRvci9xdWVyeV90b29sX2h0dHBfZXJyb3JfaGFuZGxlcic7CiBpbXBvcnQgYXhpb3MgZnJv bSAnYXhpb3MnOwogaW1wb3J0IE1vY2tBZGFwdGVyIGZyb20gJ2F4aW9zLW1vY2stYWRhcHRlcic7 CiBpbXBvcnQgJCBmcm9tICdqcXVlcnknOwpAQCAtMjcsOCArMjcsOCBAQCBkZXNjcmliZSgnRXhl Y3V0ZVF1ZXJ5JywgKCkgPT4gewogICAgIG5ldHdvcmtNb2NrID0gbmV3IE1vY2tBZGFwdGVyKGF4 aW9zKTsKICAgICBqYXNtaW5lLmFkZE1hdGNoZXJzKHtqUXVlcnl0b0hhdmVCZWVuQ2FsbGVkV2l0 aDogalF1ZXJ5dG9IYXZlQmVlbkNhbGxlZFdpdGh9KTsKICAgICB1c2VyTWFuYWdlbWVudE1vY2sg PSBqYXNtaW5lLmNyZWF0ZVNweU9iaignVXNlck1hbmFnZW1lbnQnLCBbCi0gICAgICAnaXNfcGdh X2xvZ2luX3JlcXVpcmVkJywKLSAgICAgICdwZ2FfbG9naW4nLAorICAgICAgJ2lzUGdhTG9naW5S ZXF1aXJlZCcsCisgICAgICAncGdhTG9naW4nLAogICAgIF0pOwogCiAgICAgc3FsRWRpdG9yTW9j ayA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCdTcWxFZGl0b3InLCBbCkBAIC00MCwxNCArNDAsMTQg QEAgZGVzY3JpYmUoJ0V4ZWN1dGVRdWVyeScsICgpID0+IHsKICAgICAgICd1cGRhdGVfbXNnX2hp c3RvcnknLAogICAgICAgJ19oaWdobGlnaHRfZXJyb3InLAogICAgICAgJ19pbml0X3BvbGxpbmdf ZmxhZ3MnLAotICAgICAgJ3NhdmVfc3RhdGUnLAotICAgICAgJ2luaXRfdHJhbnNhY3Rpb24nLAor ICAgICAgJ3NhdmVTdGF0ZScsCisgICAgICAnaW5pdFRyYW5zYWN0aW9uJywKICAgICAgICdoYW5k bGVfY29ubmVjdGlvbl9sb3N0JywKICAgICBdKTsKICAgICBzcWxFZGl0b3JNb2NrLnRyYW5zSWQg PSAxMjM7CiAgICAgc3FsRWRpdG9yTW9jay5yb3dzX2FmZmVjdGVkID0gMTAwMDsKICAgICBleGVj dXRlUXVlcnkgPSBuZXcgc3ViamVjdC5FeGVjdXRlUXVlcnkoc3FsRWRpdG9yTW9jaywgdXNlck1h bmFnZW1lbnRNb2NrKTsKLSAgICBpc05ld1RyYW5zYWN0aW9uUmVxdWlyZWRNb2NrID0gc3B5T24o dHJhbnNhY3Rpb24sICdpc19uZXdfdHJhbnNhY3Rpb25fcmVxdWlyZWQnKTsKKyAgICBpc05ld1Ry YW5zYWN0aW9uUmVxdWlyZWRNb2NrID0gc3B5T24oaHR0cEVycm9ySGFuZGxlciwgJ2h0dHBSZXNw b25zZVJlcXVpcmVzTmV3VHJhbnNhY3Rpb24nKTsKICAgfSk7CiAKICAgYWZ0ZXJFYWNoKCgpID0+ IHsKQEAgLTI3Miw3ICsyNzIsNyBAQCBkZXNjcmliZSgnRXhlY3V0ZVF1ZXJ5JywgKCkgPT4gewog ICAgICAgICAgIGRlc2NyaWJlKCd3aGVuIEpTT04gcmVzcG9uc2UgaXMgYXZhaWxhYmxlJywgKCkg PT4gewogICAgICAgICAgICAgZGVzY3JpYmUoJ3doZW4gbG9naW4gaXMgbm90IHJlcXVpcmVkJywg KCkgPT4gewogICAgICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKLSAgICAgICAgICAgICAg ICB1c2VyTWFuYWdlbWVudE1vY2suaXNfcGdhX2xvZ2luX3JlcXVpcmVkLmFuZC5yZXR1cm5WYWx1 ZShmYWxzZSk7CisgICAgICAgICAgICAgICAgdXNlck1hbmFnZW1lbnRNb2NrLmlzUGdhTG9naW5S ZXF1aXJlZC5hbmQucmV0dXJuVmFsdWUoZmFsc2UpOwogICAgICAgICAgICAgICAgIHJlc3BvbnNl ID0ge3Jlc3BvbnNlSlNPTjogZXJyb3JNZXNzYWdlSnNvbn07CiAgICAgICAgICAgICAgICAgbmV0 d29ya01vY2sub25HZXQoJy9zcWxlZGl0b3IvcXVlcnlfdG9vbC9wb2xsLzEyMycpLnJlcGx5KDQw MSwgcmVzcG9uc2UpOwogCkBAIC0zMzYsNyArMzM2LDcgQEAgZGVzY3JpYmUoJ0V4ZWN1dGVRdWVy eScsICgpID0+IHsKICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBub3QgbG9naW4gaXMgZGlzcGxh eWVkJywgKGRvbmUpID0+IHsKICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KAogICAgICAgICAg ICAgICAgICAgKCkgPT4gewotICAgICAgICAgICAgICAgICAgICBleHBlY3QodXNlck1hbmFnZW1l bnRNb2NrLnBnYV9sb2dpbikubm90CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh1c2VyTWFu YWdlbWVudE1vY2sucGdhTG9naW4pLm5vdAogICAgICAgICAgICAgICAgICAgICAgIC50b0hhdmVC ZWVuQ2FsbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAg ICAgIH0sIDApOwpAQCAtMzQ1LDcgKzM0NSw3IEBAIGRlc2NyaWJlKCdFeGVjdXRlUXVlcnknLCAo KSA9PiB7CiAKICAgICAgICAgICAgIGRlc2NyaWJlKCd3aGVuIGxvZ2luIGlzIHJlcXVpcmVkJywg KCkgPT4gewogICAgICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKLSAgICAgICAgICAgICAg ICB1c2VyTWFuYWdlbWVudE1vY2suaXNfcGdhX2xvZ2luX3JlcXVpcmVkLmFuZC5yZXR1cm5WYWx1 ZSh0cnVlKTsKKyAgICAgICAgICAgICAgICB1c2VyTWFuYWdlbWVudE1vY2suaXNQZ2FMb2dpblJl cXVpcmVkLmFuZC5yZXR1cm5WYWx1ZSh0cnVlKTsKICAgICAgICAgICAgICAgICByZXNwb25zZSA9 IHtyZXNwb25zZUpTT046IGVycm9yTWVzc2FnZUpzb259OwogICAgICAgICAgICAgICAgIG5ldHdv cmtNb2NrLm9uR2V0KCcvc3FsZWRpdG9yL3F1ZXJ5X3Rvb2wvcG9sbC8xMjMnKS5yZXBseSg0MDEs IHJlc3BvbnNlKTsKIApAQCAtNDA5LDcgKzQwOSw3IEBAIGRlc2NyaWJlKCdFeGVjdXRlUXVlcnkn LCAoKSA9PiB7CiAgICAgICAgICAgICAgIGl0KCdzaG91bGQgbG9naW4gaXMgZGlzcGxheWVkJywg KGRvbmUpID0+IHsKICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KAogICAgICAgICAgICAgICAg ICAgKCkgPT4gewotICAgICAgICAgICAgICAgICAgICBleHBlY3QodXNlck1hbmFnZW1lbnRNb2Nr LnBnYV9sb2dpbikKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHVzZXJNYW5hZ2VtZW50TW9j ay5wZ2FMb2dpbikKICAgICAgICAgICAgICAgICAgICAgICAudG9IYXZlQmVlbkNhbGxlZCgpOwog ICAgICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICAgICAgICB9LCAwKTsKQEAg LTQyMCw3ICs0MjAsNyBAQCBkZXNjcmliZSgnRXhlY3V0ZVF1ZXJ5JywgKCkgPT4gewogICAgICAg ICAgIGRlc2NyaWJlKCd3aGVuIG5vIEpTT04gcmVzcG9uc2UgaXMgYXZhaWxhYmxlJywgKCkgPT4g ewogICAgICAgICAgICAgZGVzY3JpYmUoJ3doZW4gbG9naW4gaXMgbm90IHJlcXVpcmVkJywgKCkg PT4gewogICAgICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKLSAgICAgICAgICAgICAgICB1 c2VyTWFuYWdlbWVudE1vY2suaXNfcGdhX2xvZ2luX3JlcXVpcmVkLmFuZC5yZXR1cm5WYWx1ZShm YWxzZSk7CisgICAgICAgICAgICAgICAgdXNlck1hbmFnZW1lbnRNb2NrLmlzUGdhTG9naW5SZXF1 aXJlZC5hbmQucmV0dXJuVmFsdWUoZmFsc2UpOwogICAgICAgICAgICAgICAgIHJlc3BvbnNlID0g ewogICAgICAgICAgICAgICAgICAgZXJyb3Jtc2c6IGVycm9yTWVzc2FnZVRleHQsCiAgICAgICAg ICAgICAgICAgfTsKQEAgLTQ4Niw3ICs0ODYsNyBAQCBkZXNjcmliZSgnRXhlY3V0ZVF1ZXJ5Jywg KCkgPT4gewogICAgICAgICAgICAgICBpdCgnc2hvdWxkIGxvZ2luIGlzIG5vdCBkaXNwbGF5ZWQn LCAoZG9uZSkgPT4gewogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoCiAgICAgICAgICAgICAg ICAgICAoKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh1c2VyTWFuYWdlbWVudE1v Y2sucGdhX2xvZ2luKS5ub3QKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHVzZXJNYW5hZ2Vt ZW50TW9jay5wZ2FMb2dpbikubm90CiAgICAgICAgICAgICAgICAgICAgICAgLnRvSGF2ZUJlZW5D YWxsZWQoKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgICAgICAg fSwgMCk7CkBAIC00OTUsNyArNDk1LDcgQEAgZGVzY3JpYmUoJ0V4ZWN1dGVRdWVyeScsICgpID0+ IHsKIAogICAgICAgICAgICAgZGVzY3JpYmUoJ3doZW4gbG9naW4gaXMgcmVxdWlyZWQnLCAoKSA9 PiB7CiAgICAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4gewotICAgICAgICAgICAgICAgIHVz ZXJNYW5hZ2VtZW50TW9jay5pc19wZ2FfbG9naW5fcmVxdWlyZWQuYW5kLnJldHVyblZhbHVlKHRy dWUpOworICAgICAgICAgICAgICAgIHVzZXJNYW5hZ2VtZW50TW9jay5pc1BnYUxvZ2luUmVxdWly ZWQuYW5kLnJldHVyblZhbHVlKHRydWUpOwogICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gewog ICAgICAgICAgICAgICAgICAgZXJyb3Jtc2c6IGVycm9yTWVzc2FnZVRleHQsCiAgICAgICAgICAg ICAgICAgfTsKQEAgLTU2MSw3ICs1NjEsNyBAQCBkZXNjcmliZSgnRXhlY3V0ZVF1ZXJ5JywgKCkg PT4gewogICAgICAgICAgICAgICBpdCgnc2hvdWxkIGxvZ2luIGlzIGRpc3BsYXllZCcsIChkb25l KSA9PiB7CiAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgKICAgICAgICAgICAgICAgICAgICgp ID0+IHsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHVzZXJNYW5hZ2VtZW50TW9jay5wZ2Ff bG9naW4pCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh1c2VyTWFuYWdlbWVudE1vY2sucGdh TG9naW4pCiAgICAgICAgICAgICAgICAgICAgICAgLnRvSGF2ZUJlZW5DYWxsZWQoKTsKICAgICAg ICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgICAgICAgfSwgMCk7CkBAIC02MzMs NyArNjMzLDcgQEAgZGVzY3JpYmUoJ0V4ZWN1dGVRdWVyeScsICgpID0+IHsKICAgICAgICAgICAg IGl0KCdzaG91bGQgbG9naW4gaXMgbm90IGRpc3BsYXllZCcsIChkb25lKSA9PiB7CiAgICAgICAg ICAgICAgIHNldFRpbWVvdXQoCiAgICAgICAgICAgICAgICAgKCkgPT4gewotICAgICAgICAgICAg ICAgICAgZXhwZWN0KHVzZXJNYW5hZ2VtZW50TW9jay5wZ2FfbG9naW4pLm5vdAorICAgICAgICAg ICAgICAgICAgZXhwZWN0KHVzZXJNYW5hZ2VtZW50TW9jay5wZ2FMb2dpbikubm90CiAgICAgICAg ICAgICAgICAgICAgIC50b0hhdmVCZWVuQ2FsbGVkKCk7CiAgICAgICAgICAgICAgICAgICBkb25l KCk7CiAgICAgICAgICAgICAgICAgfSwgMCk7CkBAIC0xMzY2LDcgKzEzNjYsNyBAQCBkZXNjcmli ZSgnRXhlY3V0ZVF1ZXJ5JywgKCkgPT4gewogICAgICAgZGVzY3JpYmUoJ3doZW4gZXJyb3IgaXMg cmV0dXJuZWQgYnkgdGhlIHNlcnZlcicsICgpID0+IHsKICAgICAgICAgZGVzY3JpYmUoJ3doZW4g bG9naW4gaXMgbm90IHJlcXVpcmVkJywgKCkgPT4gewogICAgICAgICAgIGJlZm9yZUVhY2goKCkg PT4gewotICAgICAgICAgICAgdXNlck1hbmFnZW1lbnRNb2NrLmlzX3BnYV9sb2dpbl9yZXF1aXJl ZC5hbmQucmV0dXJuVmFsdWUoZmFsc2UpOworICAgICAgICAgICAgdXNlck1hbmFnZW1lbnRNb2Nr LmlzUGdhTG9naW5SZXF1aXJlZC5hbmQucmV0dXJuVmFsdWUoZmFsc2UpOwogICAgICAgICAgICAg cmVzcG9uc2UuZXJyb3Jtc2cgPSAnc29tZSBlcnJvciBtZXNzYWdlJzsKICAgICAgICAgICAgIG5l dHdvcmtNb2NrLm9uQW55KCcvc3FsZWRpdG9yL3F1ZXJ5X3Rvb2wvc3RhcnQvMTIzJykucmVwbHko NTAwLCByZXNwb25zZSk7CiAKQEAgLTE0MjIsMTkgKzE0MjIsMTkgQEAgZGVzY3JpYmUoJ0V4ZWN1 dGVRdWVyeScsICgpID0+IHsKIAogICAgICAgICAgIGl0KCdzaG91bGQgbm90IHNhdmUgdGhlIHN0 YXRlJywgKCkgPT4gewogICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7Ci0gICAgICAgICAg ICAgIGV4cGVjdChzcWxFZGl0b3JNb2NrLnNhdmVfc3RhdGUpLm5vdC50b0hhdmVCZWVuQ2FsbGVk KCk7CisgICAgICAgICAgICAgIGV4cGVjdChzcWxFZGl0b3JNb2NrLnNhdmVTdGF0ZSkubm90LnRv SGF2ZUJlZW5DYWxsZWQoKTsKICAgICAgICAgICAgIH0sIDApOwogICAgICAgICAgIH0pOwogCiAg ICAgICAgICAgaXQoJ3Nob3VsZCBub3QgZGlzcGxheSBwZ2EgbG9naW4nLCAoKSA9PiB7CiAgICAg ICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKLSAgICAgICAgICAgICAgZXhwZWN0KHVzZXJNYW5h Z2VtZW50TW9jay5wZ2FfbG9naW4pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7CisgICAgICAgICAg ICAgIGV4cGVjdCh1c2VyTWFuYWdlbWVudE1vY2sucGdhTG9naW4pLm5vdC50b0hhdmVCZWVuQ2Fs bGVkKCk7CiAgICAgICAgICAgICB9LCAwKTsKICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAg ICAgICAgIGRlc2NyaWJlKCd3aGVuIGxvZ2luIGlzIHJlcXVpcmVkJywgKCkgPT4gewogICAgICAg ICAgIGJlZm9yZUVhY2goKCkgPT4gewotICAgICAgICAgICAgdXNlck1hbmFnZW1lbnRNb2NrLmlz X3BnYV9sb2dpbl9yZXF1aXJlZC5hbmQucmV0dXJuVmFsdWUodHJ1ZSk7CisgICAgICAgICAgICB1 c2VyTWFuYWdlbWVudE1vY2suaXNQZ2FMb2dpblJlcXVpcmVkLmFuZC5yZXR1cm5WYWx1ZSh0cnVl KTsKICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ybXNnID0gJ3NvbWUgZXJyb3IgbWVzc2FnZSc7 CiAgICAgICAgICAgICBuZXR3b3JrTW9jay5vbkFueSgnL3NxbGVkaXRvci9xdWVyeV90b29sL3N0 YXJ0LzEyMycpLnJlcGx5KDUwMCwgcmVzcG9uc2UpOwogCkBAIC0xNDkwLDcgKzE0OTAsNyBAQCBk ZXNjcmliZSgnRXhlY3V0ZVF1ZXJ5JywgKCkgPT4gewogCiAgICAgICAgICAgaXQoJ3Nob3VsZCBz YXZlIHRoZSBzdGF0ZScsICgpID0+IHsKICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewot ICAgICAgICAgICAgICBleHBlY3Qoc3FsRWRpdG9yTW9jay5zYXZlX3N0YXRlKS50b0hhdmVCZWVu Q2FsbGVkV2l0aCgKKyAgICAgICAgICAgICAgZXhwZWN0KHNxbEVkaXRvck1vY2suc2F2ZVN0YXRl KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKICAgICAgICAgICAgICAgICAnZXhlY3V0ZScsCiAgICAg ICAgICAgICAgICAgWycnXQogICAgICAgICAgICAgICApOwpAQCAtMTQ5OSw3ICsxNDk5LDcgQEAg ZGVzY3JpYmUoJ0V4ZWN1dGVRdWVyeScsICgpID0+IHsKIAogICAgICAgICAgIGl0KCdzaG91bGQg ZGlzcGxheSBwZ2EgbG9naW4nLCAoKSA9PiB7CiAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+ IHsKLSAgICAgICAgICAgICAgZXhwZWN0KHVzZXJNYW5hZ2VtZW50TW9jay5wZ2FfbG9naW4pLnRv SGF2ZUJlZW5DYWxsZWQoKTsKKyAgICAgICAgICAgICAgZXhwZWN0KHVzZXJNYW5hZ2VtZW50TW9j ay5wZ2FMb2dpbikudG9IYXZlQmVlbkNhbGxlZCgpOwogICAgICAgICAgICAgfSwgMCk7CiAgICAg ICAgICAgfSk7CiAgICAgICAgIH0pOwpAQCAtMTU2MSwxOSArMTU2MSwxOSBAQCBkZXNjcmliZSgn RXhlY3V0ZVF1ZXJ5JywgKCkgPT4gewogCiAgICAgICAgICAgaXQoJ3Nob3VsZCBub3Qgc2F2ZSB0 aGUgc3RhdGUnLCAoKSA9PiB7CiAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKLSAgICAg ICAgICAgICAgZXhwZWN0KHNxbEVkaXRvck1vY2suc2F2ZV9zdGF0ZSkubm90LnRvSGF2ZUJlZW5D YWxsZWQoKTsKKyAgICAgICAgICAgICAgZXhwZWN0KHNxbEVkaXRvck1vY2suc2F2ZVN0YXRlKS5u b3QudG9IYXZlQmVlbkNhbGxlZCgpOwogICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgICAgfSk7 CiAKICAgICAgICAgICBpdCgnc2hvdWxkIG5vdCBkaXNwbGF5IHBnYSBsb2dpbicsICgpID0+IHsK ICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewotICAgICAgICAgICAgICBleHBlY3QodXNl ck1hbmFnZW1lbnRNb2NrLnBnYV9sb2dpbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICAg ICAgICAgICAgZXhwZWN0KHVzZXJNYW5hZ2VtZW50TW9jay5wZ2FMb2dpbikubm90LnRvSGF2ZUJl ZW5DYWxsZWQoKTsKICAgICAgICAgICAgIH0sIDApOwogICAgICAgICAgIH0pOwogCiAgICAgICAg ICAgaXQoJ3Nob3VsZCBub3QgaW5pdGlhbGl6ZSBhIG5ldyB0cmFuc2FjdGlvbicsICgpID0+IHsK ICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewotICAgICAgICAgICAgICBleHBlY3Qoc3Fs RWRpdG9yTW9jay5pbml0X3RyYW5zYWN0aW9uKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpOworICAg ICAgICAgICAgICBleHBlY3Qoc3FsRWRpdG9yTW9jay5pbml0VHJhbnNhY3Rpb24pLm5vdC50b0hh dmVCZWVuQ2FsbGVkKCk7CiAgICAgICAgICAgICB9LCAwKTsKICAgICAgICAgICB9KTsKICAgICAg ICAgfSk7CkBAIC0xNjM1LDcgKzE2MzUsNyBAQCBkZXNjcmliZSgnRXhlY3V0ZVF1ZXJ5JywgKCkg PT4gewogCiAgICAgICAgICAgaXQoJ3Nob3VsZCBzYXZlIHRoZSBzdGF0ZScsICgpID0+IHsKICAg ICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewotICAgICAgICAgICAgICBleHBlY3Qoc3FsRWRp dG9yTW9jay5zYXZlX3N0YXRlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAgICAg ZXhwZWN0KHNxbEVkaXRvck1vY2suc2F2ZVN0YXRlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKICAg ICAgICAgICAgICAgICAnZXhlY3V0ZScsCiAgICAgICAgICAgICAgICAgWycnXQogICAgICAgICAg ICAgICApOwpAQCAtMTY0NCwxMyArMTY0NCwxMyBAQCBkZXNjcmliZSgnRXhlY3V0ZVF1ZXJ5Jywg KCkgPT4gewogCiAgICAgICAgICAgaXQoJ3Nob3VsZCBub3QgZGlzcGxheSBwZ2EgbG9naW4nLCAo KSA9PiB7CiAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKLSAgICAgICAgICAgICAgZXhw ZWN0KHVzZXJNYW5hZ2VtZW50TW9jay5wZ2FfbG9naW4pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7 CisgICAgICAgICAgICAgIGV4cGVjdCh1c2VyTWFuYWdlbWVudE1vY2sucGdhTG9naW4pLm5vdC50 b0hhdmVCZWVuQ2FsbGVkKCk7CiAgICAgICAgICAgICB9LCAwKTsKICAgICAgICAgICB9KTsKIAog ICAgICAgICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSBhIG5ldyB0cmFuc2FjdGlvbicsICgpID0+ IHsKICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewotICAgICAgICAgICAgICBleHBlY3Qo c3FsRWRpdG9yTW9jay5pbml0X3RyYW5zYWN0aW9uKS50b0hhdmVCZWVuQ2FsbGVkKCk7CisgICAg ICAgICAgICAgIGV4cGVjdChzcWxFZGl0b3JNb2NrLmluaXRUcmFuc2FjdGlvbikudG9IYXZlQmVl bkNhbGxlZCgpOwogICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgICAgfSk7CiAgICAgICAgIH0p OwpAQCAtMTY2NSw3ICsxNjY1LDcgQEAgZGVzY3JpYmUoJ0V4ZWN1dGVRdWVyeScsICgpID0+IHsK IAogICAgICAgICAgIGl0KCdzYXZlcyBzdGF0ZScsICgpID0+IHsKICAgICAgICAgICAgIHNldFRp bWVvdXQoKCkgPT4gewotICAgICAgICAgICAgICBleHBlY3Qoc3FsRWRpdG9yTW9jay5zYXZlX3N0 YXRlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAgICAgZXhwZWN0KHNxbEVkaXRv ck1vY2suc2F2ZVN0YXRlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKICAgICAgICAgICAgICAgICAn ZXhlY3V0ZScsCiAgICAgICAgICAgICAgICAgWycnXQogICAgICAgICAgICAgICApOwpkaWZmIC0t Z2l0IGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9zcWxlZGl0b3IvaXNfbmV3X3RyYW5zYWN0 aW9uX3JlcXVpcmVkX3NwZWMuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3NxbGVkaXRv ci9pc19uZXdfdHJhbnNhY3Rpb25fcmVxdWlyZWRfc3BlYy5qcwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggOTdkMWJjNS4uMDAwMDAwMAotLS0gYS93ZWIvcmVncmVzc2lvbi9qYXZhc2Ny aXB0L3NxbGVkaXRvci9pc19uZXdfdHJhbnNhY3Rpb25fcmVxdWlyZWRfc3BlYy5qcworKysgL2Rl di9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gcGdBZG1p biA0IC0gUG9zdGdyZVNRTCBUb29scwotLy8KLS8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgs IFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KLS8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFz ZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQotLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0K LWltcG9ydCB7aXNfbmV3X3RyYW5zYWN0aW9uX3JlcXVpcmVkfSBmcm9tICcuLi8uLi8uLi9wZ2Fk bWluL3N0YXRpYy9qcy9zcWxlZGl0b3IvaXNfbmV3X3RyYW5zYWN0aW9uX3JlcXVpcmVkJzsKLQot ZGVzY3JpYmUoJyNpc19uZXdfdHJhbnNhY3Rpb25fcmVxdWlyZWQnLCAoKSA9PiB7Ci0gIGRlc2Ny aWJlKCd3aGVuIHN0YXR1cyBpcyBub3QgNDA0JywgKCkgPT4gewotICAgIGl0KCdzaG91bGQgcmV0 dXJuIGZhbHNlJywgKCkgPT4gewotICAgICAgZXhwZWN0KGlzX25ld190cmFuc2FjdGlvbl9yZXF1 aXJlZCh7Ci0gICAgICAgIHN0YXR1czogMzAwLAotICAgICAgfSkpLnRvQmUoZmFsc2UpOwotICAg IH0pOwotICB9KTsKLQotICBkZXNjcmliZSgnd2hlbiBzdGF0dXMgaXMgNDA0JywgKCkgPT4gewot ICAgIGRlc2NyaWJlKCd3aGVuIGRhdGEgaXMgbm90IHByZXNlbnQnLCAoKSA9PiB7Ci0gICAgICBp dCgnc2hvdWxkIHJldHVybiBmYWxzZScsICgpID0+IHsKLSAgICAgICAgZXhwZWN0KGlzX25ld190 cmFuc2FjdGlvbl9yZXF1aXJlZCh7Ci0gICAgICAgICAgc3RhdHVzOiA0MDQsCi0gICAgICAgIH0p KS50b0JlRmFsc3koKTsKLSAgICAgIH0pOwotICAgIH0pOwotCi0gICAgZGVzY3JpYmUoJ3doZW4g ZGF0YSBpcyBwcmVzZW50JywgKCkgPT4gewotICAgICAgZGVzY3JpYmUoJ3doZW4gaW5mbyBpcyBu b3QgcHJlc2VudCBpbnNpZGUgZGF0YScsICgpID0+IHsKLSAgICAgICAgaXQoJ3Nob3VsZCByZXR1 cm4gZmFsc2UnLCAoKSA9PiB7Ci0gICAgICAgICAgZXhwZWN0KGlzX25ld190cmFuc2FjdGlvbl9y ZXF1aXJlZCh7Ci0gICAgICAgICAgICBzdGF0dXM6IDQwNCwKLSAgICAgICAgICAgIGRhdGE6IHt9 LAotICAgICAgICAgIH0pKS50b0JlRmFsc3koKTsKLSAgICAgICAgfSk7Ci0gICAgICB9KTsKLQot ICAgICAgZGVzY3JpYmUoJ3doZW4gaW5mbyBpcyBwcmVzZW50IGluc2lkZSBkYXRhJywgKCkgPT4g ewotICAgICAgICBkZXNjcmliZSgnd2hlbiBpbmZvIHZhbHVlIGlzIG5vdCAiREFUQUdSSURfVFJB TlNBQ1RJT05fUkVRVUlSRUQiJywgKCkgPT4gewotICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJu IGZhbHNlJywgKCkgPT4gewotICAgICAgICAgICAgZXhwZWN0KGlzX25ld190cmFuc2FjdGlvbl9y ZXF1aXJlZCh7Ci0gICAgICAgICAgICAgIHN0YXR1czogNDA0LAotICAgICAgICAgICAgICBkYXRh OiB7Ci0gICAgICAgICAgICAgICAgaW5mbzogJ3NvbWUgaW5mb3JtYXRpb24nLAotICAgICAgICAg ICAgICB9LAotICAgICAgICAgICAgfSkpLnRvQmUoZmFsc2UpOwotICAgICAgICAgIH0pOwotICAg ICAgICB9KTsKLQotICAgICAgICBkZXNjcmliZSgnd2hlbiBpbmZvIHZhbHVlIGlzICJEQVRBR1JJ RF9UUkFOU0FDVElPTl9SRVFVSVJFRCInLCAoKSA9PiB7Ci0gICAgICAgICAgaXQoJ3Nob3VsZCBy ZXR1cm4gZmFsc2UnLCAoKSA9PiB7Ci0gICAgICAgICAgICBleHBlY3QoaXNfbmV3X3RyYW5zYWN0 aW9uX3JlcXVpcmVkKHsKLSAgICAgICAgICAgICAgc3RhdHVzOiA0MDQsCi0gICAgICAgICAgICAg IGRhdGE6IHsKLSAgICAgICAgICAgICAgICBpbmZvOiAnREFUQUdSSURfVFJBTlNBQ1RJT05fUkVR VUlSRUQnLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfSkpLnRvQmUodHJ1ZSk7Ci0g ICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgICAgfSk7Ci0gICAgfSk7Ci0gIH0pOwotfSk7 CmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3NxbGVkaXRvci9xdWVyeV90 b29sX2h0dHBfZXJyb3JfaGFuZGxlcl9zcGVjLmpzIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlw dC9zcWxlZGl0b3IvcXVlcnlfdG9vbF9odHRwX2Vycm9yX2hhbmRsZXJfc3BlYy5qcwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTI4MTUyCi0tLSAvZGV2L251bGwKKysrIGIv d2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9zcWxlZGl0b3IvcXVlcnlfdG9vbF9odHRwX2Vycm9y X2hhbmRsZXJfc3BlYy5qcwpAQCAtMCwwICsxLDE5MSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8v CisvLyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisvLworLy8gQ29weXJpZ2h0IChDKSAy MDEzIC0gMjAxOCwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorLy8gVGhpcyBzb2Z0d2Fy ZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisvLworLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8KKworaW1wb3J0IHsKKyAgaHR0cFJlc3BvbnNlUmVxdWlyZXNOZXdUcmFuc2FjdGlv biwKKyAgaGFuZGxlUXVlcnlUb29sQWpheEVycm9yCit9IGZyb20gJy4uLy4uLy4uL3BnYWRtaW4v c3RhdGljL2pzL3NxbGVkaXRvci9xdWVyeV90b29sX2h0dHBfZXJyb3JfaGFuZGxlcic7CisKK2Rl c2NyaWJlKCcjaHR0cFJlc3BvbnNlUmVxdWlyZXNOZXdUcmFuc2FjdGlvbicsICgpID0+IHsKKyAg ZGVzY3JpYmUoJ3doZW4gc3RhdHVzIGlzIG5vdCA0MDQnLCAoKSA9PiB7CisgICAgaXQoJ3Nob3Vs ZCByZXR1cm4gZmFsc2UnLCAoKSA9PiB7CisgICAgICBleHBlY3QoaHR0cFJlc3BvbnNlUmVxdWly ZXNOZXdUcmFuc2FjdGlvbih7CisgICAgICAgIHN0YXR1czogMzAwLAorICAgICAgfSkpLnRvQmUo ZmFsc2UpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnd2hlbiBzdGF0dXMgaXMgNDA0 JywgKCkgPT4geworICAgIGRlc2NyaWJlKCd3aGVuIGRhdGEgaXMgbm90IHByZXNlbnQnLCAoKSA9 PiB7CisgICAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZScsICgpID0+IHsKKyAgICAgICAgZXhw ZWN0KGh0dHBSZXNwb25zZVJlcXVpcmVzTmV3VHJhbnNhY3Rpb24oeworICAgICAgICAgIHN0YXR1 czogNDA0LAorICAgICAgICB9KSkudG9CZUZhbHN5KCk7CisgICAgICB9KTsKKyAgICB9KTsKKwor ICAgIGRlc2NyaWJlKCd3aGVuIGRhdGEgaXMgcHJlc2VudCcsICgpID0+IHsKKyAgICAgIGRlc2Ny aWJlKCd3aGVuIGluZm8gaXMgbm90IHByZXNlbnQgaW5zaWRlIGRhdGEnLCAoKSA9PiB7CisgICAg ICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlJywgKCkgPT4geworICAgICAgICAgIGV4cGVjdCho dHRwUmVzcG9uc2VSZXF1aXJlc05ld1RyYW5zYWN0aW9uKHsKKyAgICAgICAgICAgIHN0YXR1czog NDA0LAorICAgICAgICAgICAgZGF0YToge30sCisgICAgICAgICAgfSkpLnRvQmVGYWxzeSgpOwor ICAgICAgICB9KTsKKyAgICAgIH0pOworCisgICAgICBkZXNjcmliZSgnd2hlbiBpbmZvIGlzIHBy ZXNlbnQgaW5zaWRlIGRhdGEnLCAoKSA9PiB7CisgICAgICAgIGRlc2NyaWJlKCd3aGVuIGluZm8g dmFsdWUgaXMgbm90ICJEQVRBR1JJRF9UUkFOU0FDVElPTl9SRVFVSVJFRCInLCAoKSA9PiB7Cisg ICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UnLCAoKSA9PiB7CisgICAgICAgICAgICBl eHBlY3QoaHR0cFJlc3BvbnNlUmVxdWlyZXNOZXdUcmFuc2FjdGlvbih7CisgICAgICAgICAgICAg IHN0YXR1czogNDA0LAorICAgICAgICAgICAgICBkYXRhOiB7CisgICAgICAgICAgICAgICAgaW5m bzogJ3NvbWUgaW5mb3JtYXRpb24nLAorICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfSkp LnRvQmUoZmFsc2UpOworICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgICAgICBkZXNj cmliZSgnd2hlbiBpbmZvIHZhbHVlIGlzICJEQVRBR1JJRF9UUkFOU0FDVElPTl9SRVFVSVJFRCIn LCAoKSA9PiB7CisgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UnLCAoKSA9PiB7Cisg ICAgICAgICAgICBleHBlY3QoaHR0cFJlc3BvbnNlUmVxdWlyZXNOZXdUcmFuc2FjdGlvbih7Cisg ICAgICAgICAgICAgIHN0YXR1czogNDA0LAorICAgICAgICAgICAgICBkYXRhOiB7CisgICAgICAg ICAgICAgICAgaW5mbzogJ0RBVEFHUklEX1RSQU5TQUNUSU9OX1JFUVVJUkVEJywKKyAgICAgICAg ICAgICAgfSwKKyAgICAgICAgICAgIH0pKS50b0JlKHRydWUpOworICAgICAgICAgIH0pOworICAg ICAgICB9KTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKK30pOworCisKK2Rlc2NyaWJlKCcj aGFuZGxlUXVlcnlUb29sQWpheEVycm9yJywgKCkgPT4geworICBsZXQgc3FsRWRpdG9ySGFuZGxl ciwKKyAgICBleGNlcHRpb25TcHksIHN0YXRlVG9TYXZlLAorICAgIHN0YXRlUGFyYW1ldGVycywg Y2hlY2tUcmFuc2FjdGlvbiwgVXNlck1hbmFnZW1lbnRNb2NrLAorICAgIHBnQnJvd3Nlck1vY2s7 CisKKyAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgIHN0YXRlVG9TYXZlID0gJ3Rlc3RTdGF0 ZSc7CisgICAgICBzdGF0ZVBhcmFtZXRlcnMgPSBbXTsKKyAgICAgIGNoZWNrVHJhbnNhY3Rpb24g PSBmYWxzZTsKKyAgICAgIHNxbEVkaXRvckhhbmRsZXIgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaigK KyAgICAgICAgJ2hhbmRsZXInLCBbJ2luaXRUcmFuc2FjdGlvbicsICdzYXZlU3RhdGUnLCAnaGFu ZGxlX2Nvbm5lY3Rpb25fbG9zdCddCisgICAgICApOworICAgICAgZXhjZXB0aW9uU3B5ID0gewor ICAgICAgICByZWFkeVN0YXRlOiAwLAorICAgICAgICBzdGF0dXM6IDQwNCwKKyAgICAgICAgZGF0 YTogeworICAgICAgICAgIGluZm86ICdDT05ORUNUSU9OX0xPU1QnLAorICAgICAgICB9LAorICAg ICAgfTsKKyAgICAgIHBnQnJvd3Nlck1vY2sgPSB7CisgICAgICAgICdCcm93c2VyJzogeworICAg ICAgICAgICdVc2VyTWFuYWdlbWVudCc6IGphc21pbmUuY3JlYXRlU3B5T2JqKCdVc2VyTWFuYWdl bWVudCcsIFsnaXNQZ2FMb2dpblJlcXVpcmVkJywgJ3BnYUxvZ2luJ10pCisgICAgICAgIH0KKyAg ICAgIH07CisgICAgfSk7CisKKyAgZGVzY3JpYmUoJ3doZW4gcmVhZHkgc3RhdGUgaXMgMCcsICgp ID0+IHsKKyAgICBpdCgnc2hvdWxkIHJldHVybiBjb25uZWN0aW9uJywgKCkgPT4geworICAgICAg ZXhwZWN0KAorICAgICAgICBoYW5kbGVRdWVyeVRvb2xBamF4RXJyb3IoCisgICAgICAgICAgcGdC cm93c2VyTW9jaywgc3FsRWRpdG9ySGFuZGxlciwgZXhjZXB0aW9uU3B5LCBzdGF0ZVRvU2F2ZSwK KyAgICAgICAgICBzdGF0ZVBhcmFtZXRlcnMsIGNoZWNrVHJhbnNhY3Rpb24KKyAgICAgICAgKQor ICAgICAgKS50b0JlKCdOb3QgY29ubmVjdGVkIHRvIHRoZSBzZXJ2ZXIgb3IgdGhlIGNvbm5lY3Rp b24gdG8gdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuJyk7CisgICAgfSk7CisgIH0pOworCisg IGRlc2NyaWJlKCd3aGVuIHRoZXJlIGlzIGFuIGFqYXggZXJyb3IgZHVlIHRvIGxvZ2luIGlzIHJl cXVpcmVkJywgKCkgPT4geworICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgZXhjZXB0aW9u U3B5LnJlYWR5U3RhdGUgPSAxOworICAgICAgZXhjZXB0aW9uU3B5LnN0YXR1cyA9IDQwMTsKKyAg ICAgIGV4Y2VwdGlvblNweS5kYXRhLmluZm8gPSAnUEdBRE1JTl9MT0dJTl9SRVFVSVJFRCc7Cisg ICAgICBwZ0Jyb3dzZXJNb2NrLkJyb3dzZXIuVXNlck1hbmFnZW1lbnQuaXNQZ2FMb2dpblJlcXVp cmVkLmFuZC5yZXR1cm5WYWx1ZSh0cnVlKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgc2F2 ZSB0aGUgY3VycmVudCBzdGF0ZSBhbmQgY2FsbCBsb2dpbiBoYW5kbGVyJywgKCkgPT4geworICAg ICAgaGFuZGxlUXVlcnlUb29sQWpheEVycm9yKAorICAgICAgICBwZ0Jyb3dzZXJNb2NrLCBzcWxF ZGl0b3JIYW5kbGVyLCBleGNlcHRpb25TcHksIHN0YXRlVG9TYXZlLAorICAgICAgICBzdGF0ZVBh cmFtZXRlcnMsIGNoZWNrVHJhbnNhY3Rpb24KKyAgICAgICk7CisgICAgICBleHBlY3Qoc3FsRWRp dG9ySGFuZGxlci5zYXZlU3RhdGUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHN0YXRlVG9TYXZlLCBz dGF0ZVBhcmFtZXRlcnMpOworICAgICAgZXhwZWN0KHBnQnJvd3Nlck1vY2suQnJvd3Nlci5Vc2Vy TWFuYWdlbWVudC5wZ2FMb2dpbikudG9IYXZlQmVlbkNhbGxlZCgpOworICAgIH0pOworICB9KTsK KworICBkZXNjcmliZSgnd2hlbiB0aGVyZSBpcyBhbiBhamF4IGVycm9yIGFuZCBuZXcgdHJhbnNh Y3Rpb24gaW5pdGlhbGl6YXRpb24gcmVxdWlyZWQnLCAoKSA9PiB7CisgICAgYmVmb3JlRWFjaCgo KSA9PiB7CisgICAgICBleGNlcHRpb25TcHkucmVhZHlTdGF0ZSA9IDE7CisgICAgICBleGNlcHRp b25TcHkuc3RhdHVzID0gNDA0OworICAgICAgZXhjZXB0aW9uU3B5LmRhdGEuaW5mbyA9ICdEQVRB R1JJRF9UUkFOU0FDVElPTl9SRVFVSVJFRCc7CisgICAgICBwZ0Jyb3dzZXJNb2NrLkJyb3dzZXIu VXNlck1hbmFnZW1lbnQuaXNQZ2FMb2dpblJlcXVpcmVkLmFuZC5yZXR1cm5WYWx1ZShmYWxzZSk7 CisgICAgICBjaGVja1RyYW5zYWN0aW9uID0gdHJ1ZTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91 bGQgc2F2ZSB0aGUgY3VycmVudCBzdGF0ZSBhbmQgY2FsbCBsb2dpbiBoYW5kbGVyJywgKCkgPT4g eworICAgICAgaGFuZGxlUXVlcnlUb29sQWpheEVycm9yKAorICAgICAgICBwZ0Jyb3dzZXJNb2Nr LCBzcWxFZGl0b3JIYW5kbGVyLCBleGNlcHRpb25TcHksIHN0YXRlVG9TYXZlLAorICAgICAgICBz dGF0ZVBhcmFtZXRlcnMsIGNoZWNrVHJhbnNhY3Rpb24KKyAgICAgICk7CisgICAgICBleHBlY3Qo cGdCcm93c2VyTW9jay5Ccm93c2VyLlVzZXJNYW5hZ2VtZW50LnBnYUxvZ2luKS5ub3QudG9IYXZl QmVlbkNhbGxlZCgpOworICAgICAgZXhwZWN0KHNxbEVkaXRvckhhbmRsZXIuc2F2ZVN0YXRlKS50 b0hhdmVCZWVuQ2FsbGVkV2l0aChzdGF0ZVRvU2F2ZSwgc3RhdGVQYXJhbWV0ZXJzKTsKKyAgICAg IGV4cGVjdChzcWxFZGl0b3JIYW5kbGVyLmluaXRUcmFuc2FjdGlvbikudG9IYXZlQmVlbkNhbGxl ZCgpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnd2hlbiB0aGVyZSBpcyBhbiBhamF4 IGVycm9yIGR1ZSB0byBkYXRhYmFzZSBjb25uZWN0aW9uIGhhcyBiZWVuIGxvc3QnLCAoKSA9PiB7 CisgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICBleGNlcHRpb25TcHkucmVhZHlTdGF0ZSA9 IDE7CisgICAgICBleGNlcHRpb25TcHkuc3RhdHVzID0gNTAzOworICAgICAgZXhjZXB0aW9uU3B5 LnJlc3BvbnNlSlNPTiA9IHsKKyAgICAgICAgJ2luZm8nOiAnQ09OTkVDVElPTl9MT1NUJworICAg ICAgfTsKKyAgICAgIHBnQnJvd3Nlck1vY2suQnJvd3Nlci5Vc2VyTWFuYWdlbWVudC5pc1BnYUxv Z2luUmVxdWlyZWQuYW5kLnJldHVyblZhbHVlKGZhbHNlKTsKKyAgICAgIGNoZWNrVHJhbnNhY3Rp b24gPSBmYWxzZTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgc2F2ZSB0aGUgY3VycmVudCBz dGF0ZSBhbmQgY2FsbCBjb25uZWN0aW9uIGxvc3QgaGFuZGxlcicsIChkb25lKSA9PiB7CisgICAg ICBoYW5kbGVRdWVyeVRvb2xBamF4RXJyb3IoCisgICAgICAgIHBnQnJvd3Nlck1vY2ssIHNxbEVk aXRvckhhbmRsZXIsIGV4Y2VwdGlvblNweSwgc3RhdGVUb1NhdmUsCisgICAgICAgIHN0YXRlUGFy YW1ldGVycywgY2hlY2tUcmFuc2FjdGlvbgorICAgICAgKTsKKyAgICAgIGV4cGVjdChwZ0Jyb3dz ZXJNb2NrLkJyb3dzZXIuVXNlck1hbmFnZW1lbnQucGdhTG9naW4pLm5vdC50b0hhdmVCZWVuQ2Fs bGVkKCk7CisgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgZXhwZWN0KHNxbEVkaXRv ckhhbmRsZXIuc2F2ZVN0YXRlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChzdGF0ZVRvU2F2ZSwgc3Rh dGVQYXJhbWV0ZXJzKTsKKyAgICAgICAgZXhwZWN0KHNxbEVkaXRvckhhbmRsZXIuaGFuZGxlX2Nv bm5lY3Rpb25fbG9zdCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZmFsc2UsIGV4Y2VwdGlvblNweSk7 CisgICAgICAgIGRvbmUoKTsKKyAgICAgIH0sIDApOworICAgIH0pOworICB9KTsKKworICBkZXNj cmliZSgnd2hlbiB0aGVyZSBpcyBhbiBhamF4IGVycm9yIGR1ZSB0byB1bmtub3duIHJlYXNvbics ICgpID0+IHsKKyAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgIGV4Y2VwdGlvblNweS5yZWFk eVN0YXRlID0gMTsKKyAgICAgIGV4Y2VwdGlvblNweS5zdGF0dXMgPSA4MDM7CisgICAgICBleGNl cHRpb25TcHkucmVzcG9uc2VUZXh0ID0gJ2FqYXggZmFpbGVkIHdpdGggdW5rbm93biByZWFzb24n OworICAgICAgcGdCcm93c2VyTW9jay5Ccm93c2VyLlVzZXJNYW5hZ2VtZW50LmlzUGdhTG9naW5S ZXF1aXJlZC5hbmQucmV0dXJuVmFsdWUoZmFsc2UpOworICAgICAgY2hlY2tUcmFuc2FjdGlvbiA9 IGZhbHNlOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCByZXR1cm4gcHJvcGVyIGVycm9yIG1l c3NhZ2UgZnJvbSBhamF4IGV4Y2VwdGlvbicsICgpID0+IHsKKyAgICAgIGV4cGVjdCgKKyAgICAg ICAgaGFuZGxlUXVlcnlUb29sQWpheEVycm9yKAorICAgICAgICAgIHBnQnJvd3Nlck1vY2ssIHNx bEVkaXRvckhhbmRsZXIsIGV4Y2VwdGlvblNweSwgc3RhdGVUb1NhdmUsCisgICAgICAgICAgc3Rh dGVQYXJhbWV0ZXJzLCBjaGVja1RyYW5zYWN0aW9uCisgICAgICAgICkKKyAgICAgICkudG9CZSgn YWpheCBmYWlsZWQgd2l0aCB1bmtub3duIHJlYXNvbicpOworICAgIH0pOworICB9KTsKKworfSk7 Cg== --00000000000053b7a5056901d1b9--