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 1f34Sp-0002OP-AR for pgadmin-hackers@arkaria.postgresql.org; Mon, 02 Apr 2018 18:45:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f34Sn-0006aA-UB for pgadmin-hackers@arkaria.postgresql.org; Mon, 02 Apr 2018 18:45:53 +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 1f34Sn-0006Zt-DX for pgadmin-hackers@lists.postgresql.org; Mon, 02 Apr 2018 18:45:53 +0000 Received: from mail-io0-x234.google.com ([2607:f8b0:4001:c06::234]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1f34Sg-0007JQ-6Q for pgadmin-hackers@postgresql.org; Mon, 02 Apr 2018 18:45:52 +0000 Received: by mail-io0-x234.google.com with SMTP id d6so17016290iog.1 for ; Mon, 02 Apr 2018 11:45:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pivotal-io.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=OF6E0wVcMHUgYZe44BMC3XMulPwEv2MucGcduSJA9qc=; b=CuSim+/kQ6tNsJD3gV2KmgbTguqyQCsQnsn/Bb9PK371CZu9dYxTyj3ra7sbKl5eqL eRdl5YQfz8n1RCEAmBT6cfRxZqoF4S2zgUVniJwpQzeJ4/JXLNM+2NbYV3C4uKFMVWvR a3djHsFXcAajzyNqelTm2WIc6HOB/cQm+IMYhbGl3s3fs9h0qurbwQcDeYqJR75COqIP DMu/4fSbkRsbwzNvQn8s14IMZYN2qpMK+uuZAHfKJAe6quIRYTYpJChrPNCLUjKmmsGx jB2UR8YLR6RTO7TDcjzIOy+IIuho4o9Pq9ZAibCxyLH5TjN5MwyxAUIpmiBa861KXNEA I4Mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=OF6E0wVcMHUgYZe44BMC3XMulPwEv2MucGcduSJA9qc=; b=Pvx2vPf6ddeD144cfyesRQO2wwcxk69z/DHVKiiTd86gUnhvnnHdp9XbkthK9a8B+Z 0rhPkwf3CJCVp/jAFinh+iF/atihIwGO5ljBHhdwmd4sVO9auaU5I6WM5oaZ/NdbiM3U fwl4frnEjrxLxMqDATDhZeD1lquMRbpOkfn2oWNfFpgpT3+nzOt+1lRXS9AwCbm3j1qf H14JpswFsWxFRNS28XYr771gHsjsqrf3LOTCg77uhrwswCz0HVH7q3jyfPkrUr7rfcXb ctVOJvBXHpIaxVif2rPoAm8MBlrD2UYXPUpQRHfJiFhRZHUBWoyVm8VR65vOEj3JCavx +37w== X-Gm-Message-State: ALQs6tDYc0I6KH+FYH3X484imh5c8wJAI3cythZkatLpGyjTKxBUWGDj 85O8ibWpfgnO7rJdG/ttG2l3OtaGFDcHkKYG0HGmAw== X-Google-Smtp-Source: AIpwx4+wxcpD5EUEDOCMo41EgX8ejBs/KTGPE4nSCo0QWkZUSVSSX6RrTBIhKdTph/BE5cutaOF2sR9YeNPnS4mVx0I= X-Received: by 10.107.200.84 with SMTP id y81mr9305770iof.116.1522694743025; Mon, 02 Apr 2018 11:45:43 -0700 (PDT) MIME-Version: 1.0 From: Joao De Almeida Pereira Date: Mon, 02 Apr 2018 18:45:32 +0000 Message-ID: Subject: [pgadmin4][patch] Initial patch to decouple from ACI Tree To: pgadmin-hackers Content-Type: multipart/mixed; boundary="94eb2c0b89ea42d2180568e1ff4a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --94eb2c0b89ea42d2180568e1ff4a Content-Type: multipart/alternative; boundary="94eb2c0b89ea42d2150568e1ff48" --94eb2c0b89ea42d2150568e1ff48 Content-Type: text/plain; charset="UTF-8" Hi Hackers, Attached you can find the patch that will start to decouple pgAdmin from ACITree library. This patch is intended to be merged after 3.0, because we do not want to cause any entropy or delay the release, but we want to start the discussion and show some code. This job that we started is a massive tech debt chore that will take some time to finalize and we would love the help of the community to do it. *Summary of the patch:* 0001 patch: - Creates a new tree that will allow us to create a separation between the application and ACI Tree - Creates a Fake Tree (Test double, for reference on the available test doubles: https://martinfowler.com/bliki/TestDouble.html) that can be used to inplace to replace the ACITree and also encapsulate the new tree behavior on our tests - Adds tests for all the tree functionalities 0002 patch: - Extracts, refactors, adds tests and remove dependency from ACI Tree on: - getTreeNodeHierarchy - on backup.js: menu_enabled, menu_enabled_server, start_backup_global_server, backup_objects - on datagrid.js: show_data_grid, get_panel_title, show_query_tool - Start using sprintf-js as Underscore.String is deprecating sprintf function This patch represents only 10 calls to ACITree.itemData out of 176 that are spread around our code *In Depth look on the process behind the patch:* We started writing this patch with the idea that we need to decouple pgAdmin4 from ACITree, because ACITree is no longer supported, the documentation is non existent and ACITree is no longer being actively developed. Our process: 1. We "randomly" selected a function that is part of the ACITree. From this point we decided to replace that function with our own version. The function that we choose was "itemData". The function gives us all the "data" that a specific node of the tree find. Given in order to replace the tree we would need to have a function that would give us the same information. We had 2 options: a) Create a tree with a function called itemData Pros: - At first view this was the simpler solution - Would keep the status quo Cons: - Not a OOP approach - Not very flexible b) Create a tree that would return a node given an ID and then the node would be responsible for giving it's data. Pros: - OOP Approach - More flexible and we do not need to bring the tree around, just a node Cons: - Break the current status quo Given these 2 options we decided to go for a more OOP approach creating a Tree and a TreeNode classes, that in the future will be renamed to ACITreeWrapper and TreeNode. 2. After we decided on the starting point we searched for occurrences of the function "itemData" and we found out that there were 303 occurrences of "itemData" in the code and roughly 176 calls to the function itself (some of the hits were variable names). 3. We selected the first file on the search and found the function that was responsible for calling the itemData function. 4. Extracted the function to a separate file 5. Wrap this function with tests 6. Refactor the function to ES6, give more declarative names to variables and break the functions into smaller chunks 7. When all the tests were passing we replaced ACITree with our Tree 8. We ensured that all tests were passing 9. Remove function from the original file and use the new function 10. Ensure everything still works 11. Find the next function and execute from step 4 until all the functions are replaced, refactored and tested. As you can see by the process this is a pretty huge undertake, because of the number of calls to the function. This is just the first step on the direction of completely isolating the ACITree so that we can solve the problem with a large number of elements on the tree. *What is on our radar that we need to address:* - Finish the complete decoupling of the ACITree - Performance of the current tree implementation - Tweak the naming of the Tree class to explicitly tell us this is to use only with ACITree. Thanks Joao --94eb2c0b89ea42d2150568e1ff48 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Hackers,

Attached you can find the p= atch that will start to decouple pgAdmin from ACITree library.
Th= is patch is intended to be merged after 3.0, because we do not want to caus= e any entropy or delay the release, but we want to start the discussion and= show some code.

This job that we started is a mas= sive tech debt chore that will take some time to finalize and we would love= the help of the community to do it.

Summary of= the patch:
0001 patch:=C2=A0
=C2=A0- Creates a new= tree that will allow us to create a separation between the application and= ACI Tree
=C2=A0- Creates a Fake Tree (Test double, for reference= on the available test doubles:=C2=A0https://martinfowler.com/bliki/TestDouble.html) th= at can be used to inplace to replace the ACITree and also encapsulate the n= ew tree behavior on our tests
=C2=A0- Adds tests for all the tree= functionalities

0002 patch:
=C2=A0- Ext= racts, refactors, adds tests and remove dependency from ACI Tree on:
= - getTreeNodeHierarchy
- on backup.js: menu_enabled, menu_enabled= _server, start_backup_global_server, backup_objects
- on datagrid.js= : show_data_grid, get_panel_title, show_query_tool
- Start using sprint= f-js as Underscore.String is deprecating sprintf function
=C2=A0=C2= =A0
This patch represents only 10 calls to ACITree.itemData out o= f 176 that are spread around our code


<= /div>
In Depth look on the process behind the patch:
<= br>
We started writing this patch with the idea that we need to d= ecouple pgAdmin4 from ACITree, because ACITree is no longer supported, the = documentation is non existent and ACITree is no longer being actively devel= oped.

Our process:
1. We "randomly&= quot; selected a function that is part of the ACITree. From this point we d= ecided to replace that function with our own version. The function that we = choose was "itemData".
The function gives us all the &q= uot;data" that a specific node of the tree find.
Given in or= der to replace the tree we would need to have a function that would give us= the same information. We had 2 options:
=C2=A0 a) Create a tree = with a function called itemData
Pros:
=C2=A0- At first = view this was the simpler solution
=C2=A0- Would keep the status quoCons:
=C2=A0- Not a OOP approach
=C2=A0- Not very fl= exible
=C2=A0 b) Create a tree that would return a node given an = ID and then the node would be responsible for giving it's data.
Pros:=C2=A0
=C2=A0- OOP Approach
=C2=A0- More flexib= le and we do not need to bring the tree around, just a node
Cons:=
=C2=A0- Break the current status quo

Gi= ven these 2 options we decided to go for a more OOP approach creating a Tre= e and a TreeNode classes, that in the future will be renamed to ACITreeWrap= per and TreeNode.

2. After we decided on the start= ing point we searched for occurrences of the function "itemData" = and we found out that there were 303 occurrences of "itemData" in= the code and roughly 176 calls to the function itself (some of the hits we= re variable names).

3. We selected the first file = on the search and found the function that was responsible for calling the i= temData function.

4. Extracted the function to a s= eparate file

5. Wrap this function with tests

6. Refactor the function to ES6, give more declarative= names to variables and break the functions into smaller chunks
<= br>
7. When all the tests were passing we replaced ACITree with o= ur Tree

8. We ensured that all tests were passing<= /div>

9. Remove function from the original file and use = the new function

10. Ensure everything still works=

11. Find the next function and execute from step = 4 until all the functions are replaced, refactored and tested.
As you can see by the process this is a pretty huge undertake,= because of the number of calls to the function. This is just the first ste= p on the direction of completely isolating the ACITree so that we can solve= the problem with a large number of elements on the tree.

What is on our radar that we need to address:
=C2= =A0- Finish the complete decoupling of the ACITree
=C2=A0- Perfor= mance of the current tree implementation
=C2=A0- Tweak the naming= of the Tree class to explicitly tell us this is to use only with ACITree.<= /div>


Thanks
Joao
--94eb2c0b89ea42d2150568e1ff48-- --94eb2c0b89ea42d2180568e1ff4a Content-Type: application/octet-stream; name="0001-Tree-of-information-on-the-current-status-of-the-app.patch" Content-Disposition: attachment; filename="0001-Tree-of-information-on-the-current-status-of-the-app.patch" Content-Transfer-Encoding: base64 Content-ID: <16287a8316396c9583a1> X-Attachment-Id: 16287a8316396c9583a1 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy90cmVlL3RyZWUuanMgYi93ZWIvcGdh ZG1pbi9zdGF0aWMvanMvdHJlZS90cmVlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwLi5lZDY3YWE4NQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9q cy90cmVlL3RyZWUuanMKQEAgLTAsMCArMSwxMzQgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLwor Ly8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykgMjAx MyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUg aXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vCitleHBvcnQgY2xhc3MgVHJlZU5vZGUgeworICBjb25zdHJ1Y3RvcihpZCwgZGF0YSwg cGFyZW50KSB7CisgICAgdGhpcy5pZCA9IGlkOworICAgIHRoaXMuZGF0YSA9IGRhdGE7CisgICAg dGhpcy5wYXJlbnROb2RlID0gcGFyZW50OworICAgIHRoaXMucGF0aCA9IHRoaXMuaWQ7CisgICAg aWYgKHBhcmVudCAhPT0gbnVsbCAmJiBwYXJlbnQgIT09IHVuZGVmaW5lZCAmJiBwYXJlbnQucGF0 aCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICB0aGlzLnBhdGggPSBwYXJlbnQucGF0aCArICcuJyAr IGlkOworICAgIH0KKyAgICB0aGlzLmNoaWxkcmVuID0gW107CisgIH0KKworICBoYXNQYXJlbnQo KSB7CisgICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZSAhPT0gbnVsbCAmJiB0aGlzLnBhcmVudE5v ZGUgIT09IHVuZGVmaW5lZDsKKyAgfQorCisgIHBhcmVudCgpIHsKKyAgICByZXR1cm4gdGhpcy5w YXJlbnROb2RlOworICB9CisKKyAgZ2V0RGF0YSgpIHsKKyAgICBpZiAodGhpcy5kYXRhID09PSB1 bmRlZmluZWQpIHsKKyAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgfSBlbHNlIGlmICh0aGlz LmRhdGEgPT09IG51bGwpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4g T2JqZWN0LmFzc2lnbih7fSwgdGhpcy5kYXRhKTsKKyAgfQorfQorCitleHBvcnQgY2xhc3MgVHJl ZSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMucm9vdE5vZGUgPSBuZXcgVHJlZU5vZGUo dW5kZWZpbmVkLCB7fSk7CisgICAgdGhpcy5hY2lUcmVlQXBpID0gdW5kZWZpbmVkOworICB9CisK KyAgYWRkTmV3Tm9kZShpZCwgZGF0YSwgcGF0aCkgeworICAgIGNvbnN0IHBhcmVudCA9IHRoaXMu ZmluZE5vZGUocGF0aCk7CisgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3JVcGRhdGVOb2RlKGlkLCBk YXRhLCBwYXJlbnQpOworICB9CisKKyAgZmluZE5vZGUocGF0aCkgeworICAgIGlmIChwYXRoLmxl bmd0aCA9PT0gMCkgeworICAgICAgcmV0dXJuIHRoaXMucm9vdE5vZGU7CisgICAgfQorICAgIHJl dHVybiBmaW5kSW5UcmVlKHRoaXMucm9vdE5vZGUsIHBhdGguam9pbignLicpKTsKKyAgfQorCisg IGZpbmROb2RlQnlEb21FbGVtZW50KGRvbUVsZW1lbnQpIHsKKyAgICBjb25zdCBwYXRoID0gdGhp cy50cmFuc2xhdGVUcmVlTm9kZUlkRnJvbUFDSVRyZWUoZG9tRWxlbWVudCk7CisgICAgaWYoIXBh dGggfHwgIXBhdGhbMF0pIHsKKyAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgfQorCisgICAg cmV0dXJuIHRoaXMuZmluZE5vZGUocGF0aCk7CisgIH0KKworICBzZWxlY3RlZCgpIHsKKyAgICBy ZXR1cm4gdGhpcy5hY2lUcmVlQXBpLnNlbGVjdGVkKCk7CisgIH0KKworICByZWdpc3RlcigkdHJl ZUpRdWVyeSkgeworICAgICR0cmVlSlF1ZXJ5Lm9uKCdhY2l0cmVlJywgZnVuY3Rpb24gKGV2ZW50 LCBhcGksIGl0ZW0sIGV2ZW50TmFtZSkgeworICAgICAgaWYgKGFwaS5pc0l0ZW0oaXRlbSkpIHsK KyAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2FkZGVkJykgeworICAgICAgICAgIGNvbnN0IGlk ID0gYXBpLmdldElkKGl0ZW0pOworICAgICAgICAgIGNvbnN0IGRhdGEgPSBhcGkuaXRlbURhdGEo aXRlbSk7CisgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLnRyYW5zbGF0ZVRyZWVOb2Rl SWRGcm9tQUNJVHJlZShhcGkucGFyZW50KGl0ZW0pKTsKKyAgICAgICAgICB0aGlzLmFkZE5ld05v ZGUoaWQsIGRhdGEsIHBhcmVudElkKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0uYmluZCh0 aGlzKSk7CisgICAgdGhpcy5hY2lUcmVlQXBpID0gJHRyZWVKUXVlcnkuYWNpVHJlZSgnYXBpJyk7 CisgIH0KKworICBjcmVhdGVPclVwZGF0ZU5vZGUoaWQsIGRhdGEsIHBhcmVudCkgeworICAgIGNv bnN0IG9sZE5vZGUgPSB0aGlzLmZpbmROb2RlKFtwYXJlbnQucGF0aCwgaWRdKTsKKyAgICBpZiAo b2xkTm9kZSAhPT0gbnVsbCkgeworICAgICAgb2xkTm9kZS5kYXRhID0gT2JqZWN0LmFzc2lnbih7 fSwgZGF0YSk7CisgICAgICByZXR1cm4gb2xkTm9kZTsKKyAgICB9CisKKyAgICBjb25zdCBub2Rl ID0gbmV3IFRyZWVOb2RlKGlkLCBkYXRhLCBwYXJlbnQpOworICAgIGlmIChwYXJlbnQgPT09IHRo aXMucm9vdE5vZGUpIHsKKyAgICAgIG5vZGUucGFyZW50Tm9kZSA9IG51bGw7CisgICAgfQorICAg IHBhcmVudC5jaGlsZHJlbi5wdXNoKG5vZGUpOworICAgIHJldHVybiBub2RlOworICB9CisKKyAg dHJhbnNsYXRlVHJlZU5vZGVJZEZyb21BQ0lUcmVlKGFjaVRyZWVOb2RlKSB7CisgICAgbGV0IGN1 cnJlbnRUcmVlTm9kZSA9IGFjaVRyZWVOb2RlOworICAgIGxldCBwYXRoID0gW107CisgICAgd2hp bGUgKGN1cnJlbnRUcmVlTm9kZSAhPT0gbnVsbCAmJiBjdXJyZW50VHJlZU5vZGUgIT09IHVuZGVm aW5lZCAmJiBjdXJyZW50VHJlZU5vZGUubGVuZ3RoID4gMCkgeworICAgICAgcGF0aC51bnNoaWZ0 KHRoaXMuYWNpVHJlZUFwaS5nZXRJZChjdXJyZW50VHJlZU5vZGUpKTsKKyAgICAgIGlmICh0aGlz LmFjaVRyZWVBcGkuaGFzUGFyZW50KGN1cnJlbnRUcmVlTm9kZSkpIHsKKyAgICAgICAgY3VycmVu dFRyZWVOb2RlID0gdGhpcy5hY2lUcmVlQXBpLnBhcmVudChjdXJyZW50VHJlZU5vZGUpOworICAg ICAgfSBlbHNlIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBw YXRoOworICB9Cit9CisKK2V4cG9ydCBsZXQgdHJlZSA9IG5ldyBUcmVlKCk7CisKK2Z1bmN0aW9u IGZpbmRJblRyZWUocm9vdE5vZGUsIHBhdGgpIHsKKyAgaWYgKHBhdGggPT09IG51bGwpIHsKKyAg ICByZXR1cm4gcm9vdE5vZGU7CisgIH0KKyAgcmV0dXJuIChmdW5jdGlvbiBmaW5kSW5Ob2RlKGN1 cnJlbnROb2RlKSB7CisgICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGN1cnJlbnROb2RlLmNo aWxkcmVuLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICBjb25zdCBjYWxjdWxhdGVk Tm9kZSA9IGZpbmRJbk5vZGUoY3VycmVudE5vZGUuY2hpbGRyZW5baV0pOworICAgICAgaWYgKGNh bGN1bGF0ZWROb2RlICE9PSBudWxsKSB7CisgICAgICAgIHJldHVybiBjYWxjdWxhdGVkTm9kZTsK KyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY3VycmVudE5vZGUucGF0aCA9PT0gcGF0aCkgewor ICAgICAgcmV0dXJuIGN1cnJlbnROb2RlOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gbnVs bDsKKyAgICB9CisgIH0pKHJvb3ROb2RlKTsKK30KZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9u L2phdmFzY3JpcHQvdHJlZS90cmVlX2Zha2UuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0 L3RyZWUvdHJlZV9mYWtlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5h MDk4M2M2NwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvdHJl ZS90cmVlX2Zha2UuanMKQEAgLTAsMCArMSw1NSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAt IFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4LCBUaGUg cGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVu ZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitpbXBvcnQge1RyZWV9IGZy b20gIi4uLy4uLy4uL3BnYWRtaW4vc3RhdGljL2pzL3RyZWUvdHJlZSI7CisKK2V4cG9ydCBjbGFz cyBUcmVlRmFrZSBleHRlbmRzIFRyZWUgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICBzdXBlcigp OworICAgIHRoaXMuYWNpVHJlZVRvT3VyVHJlZVRyYW5zbGF0b3IgPSB7fTsKKyAgfQorCisgIGFk ZE5ld05vZGUoaWQsIGRhdGEsIHBhdGgpIHsKKyAgICB0aGlzLmFjaVRyZWVUb091clRyZWVUcmFu c2xhdG9yW2lkXSA9IHBhdGguY29uY2F0KGlkKTsKKyAgICByZXR1cm4gc3VwZXIuYWRkTmV3Tm9k ZShpZCwgZGF0YSwgcGF0aCk7CisgIH0KKworICBoYXNQYXJlbnQoYWNpVHJlZU5vZGUpIHsKKyAg ICByZXR1cm4gdGhpcy50cmFuc2xhdGVUcmVlTm9kZUlkRnJvbUFDSVRyZWUoYWNpVHJlZU5vZGUp Lmxlbmd0aCA+IDE7CisgIH0KKworICBwYXJlbnQoYWNpVHJlZU5vZGUpIHsKKyAgICBpZiAodGhp cy5oYXNQYXJlbnQoYWNpVHJlZU5vZGUpKSB7CisgICAgICBsZXQgcGF0aCA9IHRoaXMudHJhbnNs YXRlVHJlZU5vZGVJZEZyb21BQ0lUcmVlKGFjaVRyZWVOb2RlKTsKKyAgICAgIHJldHVybiBbe2lk OiB0aGlzLmZpbmROb2RlKHBhdGgpLnBhcmVudCgpLmlkfV07CisgICAgfQorCisgICAgcmV0dXJu IG51bGw7CisgIH0KKworICB0cmFuc2xhdGVUcmVlTm9kZUlkRnJvbUFDSVRyZWUoYWNpVHJlZU5v ZGUpIHsKKyAgICByZXR1cm4gdGhpcy5hY2lUcmVlVG9PdXJUcmVlVHJhbnNsYXRvclthY2lUcmVl Tm9kZVswXS5pZF07CisgIH0KKworICBpdGVtRGF0YShhY2lUcmVlTm9kZSkgeworICAgIGxldCBw YXRoID0gdGhpcy50cmFuc2xhdGVUcmVlTm9kZUlkRnJvbUFDSVRyZWUoYWNpVHJlZU5vZGUpOwor ICAgIGlmKHBhdGggPT09IHVuZGVmaW5lZCB8fCBwYXRoID09PSBudWxsKSB7CisgICAgICByZXR1 cm4gdW5kZWZpbmVkOworICAgIH0KKyAgICByZXR1cm4gdGhpcy5maW5kTm9kZShwYXRoKS5nZXRE YXRhKCk7CisgIH0KKworICBzZWxlY3RlZCgpIHsKKyAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE5v ZGU7CisgIH0KKworICBzZXRTZWxlY3RlZE5vZGUoc2VsZWN0ZWROb2RlKSB7CisgICAgdGhpcy5z ZWxlY3RlZE5vZGUgPSBzZWxlY3RlZE5vZGU7CisgIH0KK30KZGlmZiAtLWdpdCBhL3dlYi9yZWdy ZXNzaW9uL2phdmFzY3JpcHQvdHJlZS90cmVlX3NwZWMuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZh c2NyaXB0L3RyZWUvdHJlZV9zcGVjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwLi5lODkzMGQ4NAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3Jp cHQvdHJlZS90cmVlX3NwZWMuanMKQEAgLTAsMCArMSwyODQgQEAKKy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v CisvLworLy8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAo QykgMjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29m dHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vCisKK2ltcG9ydCB7VHJlZSwgVHJlZU5vZGV9IGZyb20gIi4uLy4uLy4uL3Bn YWRtaW4vc3RhdGljL2pzL3RyZWUvdHJlZSI7CitpbXBvcnQge1RyZWVGYWtlfSBmcm9tICIuL3Ry ZWVfZmFrZSI7CisKK2NvbnN0IGNvbnRleHQgPSBkZXNjcmliZTsKKworY29uc3QgdHJlZVRlc3Rz ID0gKHRyZWVDbGFzcywgc2V0RGVmYXVsdENhbGxCYWNrKSA9PiB7CisgIGxldCB0cmVlOworICBi ZWZvcmVFYWNoKCgpID0+IHsKKyAgICB0cmVlID0gbmV3IHRyZWVDbGFzcygpOworICB9KTsKKwor ICBkZXNjcmliZSgnI2FkZE5ld05vZGUnLCAoKSA9PiB7CisgICAgZGVzY3JpYmUoJ3doZW4gYWRk IGEgbmV3IHJvb3QgZWxlbWVudCcsICgpID0+IHsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4gewor ICAgICAgICB0cmVlLmFkZE5ld05vZGUoJ3NvbWUgbmV3IG5vZGUnLCB7ZGF0YTogJ2ludGVyZXN0 aW5nJ30sIFtdKTsKKyAgICAgIH0pOworCisgICAgICBpdCgnY2FuIGJlIHJldHJpZXZlZCcsICgp ID0+IHsKKyAgICAgICAgY29uc3Qgbm9kZSA9IHRyZWUuZmluZE5vZGUoWydzb21lIG5ldyBub2Rl J10pOworICAgICAgICBleHBlY3Qobm9kZS5kYXRhKS50b0VxdWFsKHtkYXRhOiAnaW50ZXJlc3Rp bmcnfSk7CisgICAgICB9KTsKKworICAgICAgaXQoJ3JldHVybiBmYWxzZSBmb3IgI2hhc1BhcmVu dCgpJywgKCkgPT4geworICAgICAgICBjb25zdCBub2RlID0gdHJlZS5maW5kTm9kZShbJ3NvbWUg bmV3IG5vZGUnXSk7CisgICAgICAgIGV4cGVjdChub2RlLmhhc1BhcmVudCgpKS50b0JlKGZhbHNl KTsKKyAgICAgIH0pOworCisgICAgICBpdCgncmV0dXJuIG51bGwgZm9yICNwYXJlbnQoKScsICgp ID0+IHsKKyAgICAgICAgY29uc3Qgbm9kZSA9IHRyZWUuZmluZE5vZGUoWydzb21lIG5ldyBub2Rl J10pOworICAgICAgICBleHBlY3Qobm9kZS5wYXJlbnQoKSkudG9CZU51bGwoKTsKKyAgICAgIH0p OworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ3doZW4gYWRkIGEgbmV3IGVsZW1lbnQgYXMgYSBj aGlsZCcsICgpID0+IHsKKyAgICAgIGxldCBwYXJlbnROb2RlOworICAgICAgYmVmb3JlRWFjaCgo KSA9PiB7CisgICAgICAgIHBhcmVudE5vZGUgPSB0cmVlLmFkZE5ld05vZGUoJ3BhcmVudCBub2Rl Jywge2RhdGE6ICdwYXJlbnQgZGF0YSd9LCBbXSk7CisgICAgICAgIHRyZWUuYWRkTmV3Tm9kZSgn c29tZSBuZXcgbm9kZScsIHtkYXRhOiAnaW50ZXJlc3RpbmcnfSwgWydwYXJlbnQnICsKKyAgICAg ICAgJyBub2RlJ10pOworICAgICAgfSk7CisKKyAgICAgIGl0KCdjYW4gYmUgcmV0cmlldmVkJywg KCkgPT4geworICAgICAgICBjb25zdCBub2RlID0gdHJlZS5maW5kTm9kZShbJ3BhcmVudCBub2Rl JywgJ3NvbWUgbmV3IG5vZGUnXSk7CisgICAgICAgIGV4cGVjdChub2RlLmRhdGEpLnRvRXF1YWwo e2RhdGE6ICdpbnRlcmVzdGluZyd9KTsKKyAgICAgIH0pOworCisgICAgICBpdCgncmV0dXJuIHRy dWUgZm9yICNoYXNQYXJlbnQoKScsICgpID0+IHsKKyAgICAgICAgY29uc3Qgbm9kZSA9IHRyZWUu ZmluZE5vZGUoWydwYXJlbnQgbm9kZScsICdzb21lIG5ldyBub2RlJ10pOworICAgICAgICBleHBl Y3Qobm9kZS5oYXNQYXJlbnQoKSkudG9CZSh0cnVlKTsKKyAgICAgIH0pOworCisgICAgICBpdCgn cmV0dXJuICJwYXJlbnQgbm9kZSIgb2JqZWN0IGZvciAjcGFyZW50KCknLCAoKSA9PiB7CisgICAg ICAgIGNvbnN0IG5vZGUgPSB0cmVlLmZpbmROb2RlKFsncGFyZW50IG5vZGUnLCAnc29tZSBuZXcg bm9kZSddKTsKKyAgICAgICAgZXhwZWN0KG5vZGUucGFyZW50KCkpLnRvRXF1YWwocGFyZW50Tm9k ZSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCd3aGVuIGFkZCBhbiBlbGVt ZW50IHRoYXQgYWxyZWFkeSBleGlzdHMgdW5kZXIgYSBwYXJlbnQnLCAoKSA9PiB7CisgICAgICBs ZXQgcGFyZW50Tm9kZTsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICBwYXJlbnRO b2RlID0gdHJlZS5hZGROZXdOb2RlKCdwYXJlbnQgbm9kZScsIHtkYXRhOiAncGFyZW50IGRhdGEn fSwgW10pOworICAgICAgICB0cmVlLmFkZE5ld05vZGUoJ3NvbWUgbmV3IG5vZGUnLCB7ZGF0YTog J2ludGVyZXN0aW5nJ30sIFsncGFyZW50JyArCisgICAgICAgICcgbm9kZSddKTsKKyAgICAgIH0p OworCisgICAgICBpdCgnZG9lcyBub3QgYWRkIGEgbmV3IGNoaWxkJywgKCkgPT4geworICAgICAg ICB0cmVlLmFkZE5ld05vZGUoJ3NvbWUgbmV3IG5vZGUnLCB7ZGF0YTogJ2ludGVyZXN0aW5nIDEn fSwgWydwYXJlbnQnICsKKyAgICAgICAgJyBub2RlJ10pOworICAgICAgICBjb25zdCBwYXJlbnRO b2RlID0gdHJlZS5maW5kTm9kZShbJ3BhcmVudCBub2RlJ10pOworICAgICAgICBleHBlY3QocGFy ZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGgpLnRvQmUoMSk7CisgICAgICB9KTsKKworICAgICAgaXQo J3VwZGF0ZXMgdGhlIGV4aXN0aW5nIG5vZGUgZGF0YScsICgpID0+IHsKKyAgICAgICAgdHJlZS5h ZGROZXdOb2RlKCdzb21lIG5ldyBub2RlJywge2RhdGE6ICdpbnRlcmVzdGluZyAxJ30sIFsncGFy ZW50JyArCisgICAgICAgICcgbm9kZSddKTsKKyAgICAgICAgY29uc3Qgbm9kZSA9IHRyZWUuZmlu ZE5vZGUoWydwYXJlbnQgbm9kZScsICdzb21lIG5ldyBub2RlJ10pOworICAgICAgICBleHBlY3Qo bm9kZS5kYXRhKS50b0VxdWFsKHtkYXRhOiAnaW50ZXJlc3RpbmcgMSd9KTsKKyAgICAgIH0pOwor ICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnI3RyYW5zbGF0ZVRyZWVOb2RlSWRGcm9tQUNJ VHJlZScsICgpID0+IHsKKyAgICBsZXQgYWNpVHJlZUFwaTsKKyAgICBiZWZvcmVFYWNoKCgpID0+ IHsKKyAgICAgIGFjaVRyZWVBcGkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignQUNJVHJlZUFwaScs IFsKKyAgICAgICAgJ2hhc1BhcmVudCcsCisgICAgICAgICdwYXJlbnQnLAorICAgICAgICAnZ2V0 SWQnLAorICAgICAgXSk7CisKKyAgICAgIGFjaVRyZWVBcGkuZ2V0SWQuYW5kLmNhbGxGYWtlKChu b2RlKSA9PiB7CisgICAgICAgIHJldHVybiBub2RlWzBdLmlkOworICAgICAgfSk7CisgICAgICB0 cmVlLmFjaVRyZWVBcGkgPSBhY2lUcmVlQXBpOworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ1do ZW4gdHJlZSBhcyBhIHNpbmdsZSBsZXZlbCcsICgpID0+IHsKKyAgICAgIGJlZm9yZUVhY2goKCkg PT4geworICAgICAgICBhY2lUcmVlQXBpLmhhc1BhcmVudC5hbmQucmV0dXJuVmFsdWUoZmFsc2Up OworICAgICAgfSk7CisKKyAgICAgIGl0KCdyZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIElEIG9m IHRoZSBmaXJzdCBsZXZlbCcsICgpID0+IHsKKyAgICAgICAgbGV0IG5vZGUgPSBbeworICAgICAg ICAgIGlkOiAnc29tZSBpZCcsCisgICAgICAgIH1dOworICAgICAgICB0cmVlLmFkZE5ld05vZGUo J3NvbWUgaWQnLCB7fSwgW10pOworCisgICAgICAgIGV4cGVjdCh0cmVlLnRyYW5zbGF0ZVRyZWVO b2RlSWRGcm9tQUNJVHJlZShub2RlKSkudG9FcXVhbChbJ3NvbWUgaWQnXSk7CisgICAgICB9KTsK KyAgICB9KTsKKworICAgIGRlc2NyaWJlKCdXaGVuIHRyZWUgYXMgYSAyIGxldmVscycsICgpID0+ IHsKKyAgICAgIGRlc2NyaWJlKCdXaGVuIHdlIHRyeSB0byByZXRyaWV2ZSB0aGUgbm9kZSBpbiB0 aGUgc2Vjb25kIGxldmVsJywgKCkgPT4geworICAgICAgICBpdCgncmV0dXJucyBhbiBhcnJheSB3 aXRoIHRoZSBJRCBvZiB0aGUgZmlyc3QgbGV2ZWwgYW5kIHNlY29uZCBsZXZlbCcsICgpID0+IHsK KyAgICAgICAgICBhY2lUcmVlQXBpLmhhc1BhcmVudC5hbmQucmV0dXJuVmFsdWVzKHRydWUsIGZh bHNlKTsKKyAgICAgICAgICBhY2lUcmVlQXBpLnBhcmVudC5hbmQucmV0dXJuVmFsdWUoW3sKKyAg ICAgICAgICAgIGlkOiAncGFyZW50IGlkJworICAgICAgICAgIH1dKTsKKyAgICAgICAgICBsZXQg bm9kZSA9IFt7CisgICAgICAgICAgICBpZDogJ3NvbWUgaWQnLAorICAgICAgICAgIH1dOworCisg ICAgICAgICAgdHJlZS5hZGROZXdOb2RlKCdwYXJlbnQgaWQnLCB7fSwgW10pOworICAgICAgICAg IHRyZWUuYWRkTmV3Tm9kZSgnc29tZSBpZCcsIHt9LCBbJ3BhcmVudCBpZCddKTsKKworICAgICAg ICAgIGV4cGVjdCh0cmVlLnRyYW5zbGF0ZVRyZWVOb2RlSWRGcm9tQUNJVHJlZShub2RlKSkKKyAg ICAgICAgICAgIC50b0VxdWFsKFsncGFyZW50IGlkJywgJ3NvbWUgaWQnXSk7CisgICAgICAgIH0p OworICAgICAgfSk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCcjc2VsZWN0ZWQnLCAo KSA9PiB7CisgICAgY29udGV4dCgnYSBub2RlIGluIHRoZSB0cmVlIGlzIHNlbGVjdGVkJywgKCkg PT4geworICAgICAgaXQoJ3JldHVybnMgdGhhdCBub2RlIG9iamVjdCcsICgpID0+IHsKKyAgICAg ICAgbGV0IHNlbGVjdGVkTm9kZSA9IG5ldyBUcmVlTm9kZSgnYmFtbScsIHt9LCBbXSk7CisgICAg ICAgIHNldERlZmF1bHRDYWxsQmFjayh0cmVlLCBzZWxlY3RlZE5vZGUpCisgICAgICAgIGV4cGVj dCh0cmVlLnNlbGVjdGVkKCkpLnRvRXF1YWwoc2VsZWN0ZWROb2RlKTsKKyAgICAgIH0pOworICAg IH0pOworICB9KTsKKworICBkZXNjcmliZSgnI2ZpbmROb2RlQnlUcmVlRWxlbWVudCcsICgpID0+ IHsKKyAgICBjb250ZXh0KCdyZXRyaWV2ZSBkYXRhIGZyb20gbm9kZSBub3QgZm91bmQnLCAoKSA9 PiB7CisgICAgICBpdCgncmV0dXJuIHVuZGVmaW5lZCcsICgpID0+IHsKKyAgICAgICAgbGV0IGFj aVRyZWVBcGkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignQUNJVHJlZUFwaScsIFsKKyAgICAgICAg ICAnaGFzUGFyZW50JywKKyAgICAgICAgICAncGFyZW50JywKKyAgICAgICAgICAnZ2V0SWQnLAor ICAgICAgICBdKTsKKworICAgICAgICBhY2lUcmVlQXBpLmdldElkLmFuZC5jYWxsRmFrZSgobm9k ZSkgPT4geworICAgICAgICAgIHJldHVybiBub2RlWzBdLmlkOworICAgICAgICB9KTsKKyAgICAg ICAgdHJlZS5hY2lUcmVlQXBpID0gYWNpVHJlZUFwaTsKKyAgICAgICAgZXhwZWN0KHRyZWUuZmlu ZE5vZGVCeURvbUVsZW1lbnQoWyc8bGk+c29tZXRoaW5nPC9saT4nXSkpLnRvQmVVbmRlZmluZWQo KTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKK307CisKK2Rlc2NyaWJlKCd0cmVlIHRlc3Rz JywgKCkgPT4geworICBkZXNjcmliZSgnVHJlZU5vZGUnLCAoKSA9PiB7CisgICAgZGVzY3JpYmUo JyNoYXNQYXJlbnQnLCAoKSA9PiB7CisgICAgICBjb250ZXh0KCdwYXJlbnQgaXMgbnVsbCcsICgp ID0+IHsKKyAgICAgICAgaXQoJ3JldHVybnMgZmFsc2UnLCAoKSA9PiB7CisgICAgICAgICAgbGV0 IHRyZWVOb2RlID0gbmV3IFRyZWVOb2RlKCcxMjMnLCB7fSwgbnVsbCk7CisgICAgICAgICAgZXhw ZWN0KHRyZWVOb2RlLmhhc1BhcmVudCgpKS50b0JlKGZhbHNlKTsKKyAgICAgICAgfSk7CisgICAg ICB9KTsKKyAgICAgIGNvbnRleHQoJ3BhcmVudCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7CisgICAg ICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAgICAgICAgIGxldCB0cmVlTm9kZSA9 IG5ldyBUcmVlTm9kZSgnMTIzJywge30sIHVuZGVmaW5lZCk7CisgICAgICAgICAgZXhwZWN0KHRy ZWVOb2RlLmhhc1BhcmVudCgpKS50b0JlKGZhbHNlKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsK KyAgICAgIGNvbnRleHQoJ3BhcmVudCBleGlzdHMnLCAoKSA9PiB7CisgICAgICAgIGl0KCdyZXR1 cm5zIHRydWUnLCAoKSA9PiB7CisgICAgICAgICAgbGV0IHBhcmVudE5vZGUgPSBuZXcgVHJlZU5v ZGUoJzQ1NicsIHt9LCB1bmRlZmluZWQpOworICAgICAgICAgIGxldCB0cmVlTm9kZSA9IG5ldyBU cmVlTm9kZSgnMTIzJywge30sIHBhcmVudE5vZGUpOworICAgICAgICAgIGV4cGVjdCh0cmVlTm9k ZS5oYXNQYXJlbnQoKSkudG9CZSh0cnVlKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9 KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ1RyZWUnLCAoKSA9PiB7CisgICAgZnVuY3Rpb24gcmVh bFRyZWVTZWxlY3ROb2RlKHRyZWUsIHNlbGVjdGVkTm9kZSkgeworICAgICAgbGV0IGFjaVRyZWVB cGkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignQUNJVHJlZUFwaScsIFsKKyAgICAgICAgJ3NlbGVj dGVkJywKKyAgICAgIF0pOworICAgICAgdHJlZS5hY2lUcmVlQXBpID0gYWNpVHJlZUFwaTsKKyAg ICAgIGFjaVRyZWVBcGkuc2VsZWN0ZWQuYW5kLnJldHVyblZhbHVlKHNlbGVjdGVkTm9kZSk7Cisg ICAgfQorCisgICAgdHJlZVRlc3RzKFRyZWUsIHJlYWxUcmVlU2VsZWN0Tm9kZSk7CisgIH0pOwor CisgIGRlc2NyaWJlKCdUcmVlRmFrZScsICgpID0+IHsKKyAgICBmdW5jdGlvbiBmYWtlVHJlZVNl bGVjdE5vZGUodHJlZSwgc2VsZWN0ZWROb2RlKSB7CisgICAgICB0cmVlLnNldFNlbGVjdGVkTm9k ZShzZWxlY3RlZE5vZGUpOworICAgIH0KKworICAgIHRyZWVUZXN0cyhUcmVlRmFrZSwgZmFrZVRy ZWVTZWxlY3ROb2RlKTsKKworICAgIGRlc2NyaWJlKCcjaGFzUGFyZW50JywgKCkgPT4geworICAg ICAgY29udGV4dCgndHJlZSBjb250YWlucyBtdWx0aXBsZSBsZXZlbHMnLCAoKSA9PiB7CisgICAg ICAgIGxldCB0cmVlOworICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgICB0cmVl ID0gbmV3IFRyZWVGYWtlKCk7CisgICAgICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDEnLCB7 ZGF0YTogJ2ludGVyZXN0aW5nJ30sIFtdKTsKKyAgICAgICAgICB0cmVlLmFkZE5ld05vZGUoJ2xl dmVsMicsIHtkYXRhOiAnaW50ZXJlc3RpbmcnfSwgWydsZXZlbDEnXSk7CisgICAgICAgIH0pOwor CisgICAgICAgIGNvbnRleHQoJ25vZGUgaXMgYXQgdGhlIGZpcnN0IGxldmVsJywgKCkgPT4gewor ICAgICAgICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAgICAgICAgICAgZXhwZWN0 KHRyZWUuaGFzUGFyZW50KFt7aWQ6ICdsZXZlbDEnfV0pKS50b0JlKGZhbHNlKTsKKyAgICAgICAg ICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29udGV4dCgnbm9kZSBpcyBhdCB0aGUgc2Vj b25kIGxldmVsJywgKCkgPT4geworICAgICAgICAgIGl0KCdyZXR1cm5zIHRydWUnLCAoKSA9PiB7 CisgICAgICAgICAgICBleHBlY3QodHJlZS5oYXNQYXJlbnQoW3tpZDogJ2xldmVsMid9XSkpLnRv QmUodHJ1ZSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7 CisKKyAgICBkZXNjcmliZSgnI3BhcmVudCcsICgpID0+IHsKKyAgICAgIGxldCB0cmVlOworICAg ICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgIHRyZWUgPSBuZXcgVHJlZUZha2UoKTsKKyAg ICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDEnLCB7ZGF0YTogJ2ludGVyZXN0aW5nJ30sIFtd KTsKKyAgICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDInLCB7ZGF0YTogJ2ludGVyZXN0aW5n J30sIFsnbGV2ZWwxJ10pOworICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ25vZGUgaXMgdGhl IHJvb3QnLCAoKSA9PiB7CisgICAgICAgIGl0KCdyZXR1cm5zIG51bGwnLCAoKSA9PiB7CisgICAg ICAgICAgZXhwZWN0KHRyZWUucGFyZW50KFt7aWQ6ICdsZXZlbDEnfV0pKS50b0JlTnVsbCgpOwor ICAgICAgICB9KTsKKyAgICAgIH0pOworCisgICAgICBjb250ZXh0KCdub2RlIGlzIG5vdCByb290 JywgKCkgPT4geworICAgICAgICBpdCgncmV0dXJucyByb290IGVsZW1lbnQnLCAoKSA9PiB7Cisg ICAgICAgICAgZXhwZWN0KHRyZWUucGFyZW50KFt7aWQ6ICdsZXZlbDInfV0pKS50b0VxdWFsKFt7 aWQ6ICdsZXZlbDEnfV0pOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAg ZGVzY3JpYmUoJyNpdGVtRGF0YScsICgpID0+IHsKKyAgICAgIGxldCB0cmVlOworICAgICAgYmVm b3JlRWFjaCgoKSA9PiB7CisgICAgICAgIHRyZWUgPSBuZXcgVHJlZUZha2UoKTsKKyAgICAgICAg dHJlZS5hZGROZXdOb2RlKCdsZXZlbDEnLCB7ZGF0YTogJ2ludGVyZXN0aW5nJ30sIFtdKTsKKyAg ICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDInLCB7ZGF0YTogJ2V4cGVjdGVkIGRhdGEnfSwg WydsZXZlbDEnXSk7CisgICAgICB9KTsKKworICAgICAgY29udGV4dCgncmV0cmlldmUgZGF0YSBm cm9tIHRoZSBub2RlJywgKCkgPT4geworICAgICAgICBpdCgncmV0dXJuIHRoZSBub2RlIGRhdGEn LCAoKSA9PiB7CisgICAgICAgICAgZXhwZWN0KHRyZWUuaXRlbURhdGEoW3tpZDogJ2xldmVsMid9 XSkpLnRvRXF1YWwoeworICAgICAgICAgICAgZGF0YTogJ2V4cGVjdGVkJyArCisgICAgICAgICAg ICAnIGRhdGEnCisgICAgICAgICAgfSkKKyAgICAgICAgfSk7CisgICAgICB9KTsKKworICAgICAg Y29udGV4dCgncmV0cmlldmUgZGF0YSBmcm9tIG5vZGUgbm90IGZvdW5kJywgKCkgPT4geworICAg ICAgICBpdCgncmV0dXJuIHVuZGVmaW5lZCcsICgpID0+IHsKKyAgICAgICAgICBleHBlY3QodHJl ZS5pdGVtRGF0YShbe2lkOiAnYmFtbSd9XSkpLnRvQmVVbmRlZmluZWQoKTsKKyAgICAgICAgfSk7 CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKKwotLQoyLjE1LjEKCg== --94eb2c0b89ea42d2180568e1ff4a Content-Type: application/octet-stream; name="0002-Extractions-of-multiples-locations-where-we-used-the.patch" Content-Disposition: attachment; filename="0002-Extractions-of-multiples-locations-where-we-used-the.patch" Content-Transfer-Encoding: base64 Content-ID: <16287a8316e1c8ce3f12> X-Attachment-Id: 16287a8316e1c8ce3f12 ZGlmZiAtLWdpdCBhL3dlYi9wYWNrYWdlLmpzb24gYi93ZWIvcGFja2FnZS5qc29uCmluZGV4IDNj ZTg2YTExLi5mOGQ4NzYwNyAxMDA2NDQKLS0tIGEvd2ViL3BhY2thZ2UuanNvbgorKysgYi93ZWIv cGFja2FnZS5qc29uCkBAIC04NCw2ICs4NCw3IEBACiAgICAgInNsaWNrZ3JpZCI6ICJnaXQraHR0 cHM6Ly9naXRodWIuY29tLzZwYWMvU2xpY2tHcmlkLmdpdCMyLjMuNyIsCiAgICAgInNuYXBzdmci OiAiXjAuNS4xIiwKICAgICAic3BlY3RydW0tY29sb3JwaWNrZXIiOiAiXjEuOC4wIiwKKyAgICAi c3ByaW50Zi1qcyI6ICJeMS4xLjEiLAogICAgICJ1bmRlcnNjb3JlIjogIl4xLjguMyIsCiAgICAg InVuZGVyc2NvcmUuc3RyaW5nIjogIl4zLjMuNCIsCiAgICAgIndhdGNoaWZ5IjogIn4zLjkuMCIs CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy9zdGF0aWMvanMvc2NoZW1hLmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvc3RhdGljL2pzL3NjaGVt YS5qcwppbmRleCBhN2ZkNGM3Yy4uMTBkYzdlM2IgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3N0YXRpYy9qcy9z Y2hlbWEuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvc3RhdGljL2pzL3NjaGVtYS5qcwpAQCAtNDUwLDI5ICs0NTAsNyBA QCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS5zY2hlbWEnLCBbCiAgICAgfSk7CgogICAgIHBnQnJvd3Nl ci50YWJsZUNoaWxkVHJlZU5vZGVIaWVyYXJjaHkgPSBmdW5jdGlvbihpKSB7Ci0gICAgICB2YXIg aWR4ID0gMCwKLSAgICAgICAgcmVzID0ge30sCi0gICAgICAgIHQgPSBwZ0Jyb3dzZXIudHJlZTsK LQotICAgICAgZG8gewotICAgICAgICB2YXIgZCA9IHQuaXRlbURhdGEoaSk7Ci0gICAgICAgIGlm ICgKLSAgICAgICAgICBkLl90eXBlIGluIHBnQnJvd3Nlci5Ob2RlcyAmJiBwZ0Jyb3dzZXIuTm9k ZXNbZC5fdHlwZV0uaGFzSWQKLSAgICAgICAgKSB7Ci0gICAgICAgICAgaWYgKGQuX3R5cGUgPT09 ICdwYXJ0aXRpb24nIHx8IGQuX3R5cGUgPT09ICd0YWJsZScpIHsKLSAgICAgICAgICAgIGlmICgh KCd0YWJsZScgaW4gcmVzKSkgewotICAgICAgICAgICAgICByZXNbJ3RhYmxlJ10gPSBfLmV4dGVu ZCh7fSwgZCwgeydwcmlvcml0eSc6IGlkeH0pOwotICAgICAgICAgICAgICBpZHggLT0gMTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVzW2QuX3R5cGVd ID0gXy5leHRlbmQoe30sIGQsIHsncHJpb3JpdHknOiBpZHh9KTsKLSAgICAgICAgICAgIGlkeCAt PSAxOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpID0gdC5oYXNQYXJlbnQoaSkg PyB0LnBhcmVudChpKSA6IG51bGw7Ci0gICAgICB9IHdoaWxlIChpKTsKLQotICAgICAgcmV0dXJu IHJlczsKKyAgICAgIHJldHVybiB0aGlzLmdldFRyZWVOb2RlSGllcmFyY2h5KGkpOwogICAgIH07 CiAgIH0KCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29sdW1uL3N0YXRpYy9qcy9jb2x1bW4uanMg Yi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2No ZW1hcy90YWJsZXMvY29sdW1uL3N0YXRpYy9qcy9jb2x1bW4uanMKaW5kZXggNzJiNmViMGMuLjFm ZGFjZjUyIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29sdW1uL3N0YXRpYy9qcy9jb2x1bW4uanMK KysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2Vz L3NjaGVtYXMvdGFibGVzL2NvbHVtbi9zdGF0aWMvanMvY29sdW1uLmpzCkBAIC04OCw3ICs4OCw2 IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmNvbHVtbicsIFsKCiAgIGlmICghcGdCcm93c2VyLk5v ZGVzWydjb2x1bW4nXSkgewogICAgIHBnQnJvd3Nlci5Ob2Rlc1snY29sdW1uJ10gPSBwZ0Jyb3dz ZXIuTm9kZS5leHRlbmQoewotICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6IHBnQnJvd3Nlci50 YWJsZUNoaWxkVHJlZU5vZGVIaWVyYXJjaHksCiAgICAgICBwYXJlbnRfdHlwZTogWyd0YWJsZScs ICd2aWV3JywgJ212aWV3J10sCiAgICAgICBjb2xsZWN0aW9uX3R5cGU6IFsnY29sbC10YWJsZScs ICdjb2xsLXZpZXcnLCAnY29sbC1tdmlldyddLAogICAgICAgdHlwZTogJ2NvbHVtbicsCmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFz ZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvY2hlY2tfY29uc3RyYWludC9zdGF0aWMvanMv Y2hlY2tfY29uc3RyYWludC5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9z ZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9jaGVja19jb25zdHJh aW50L3N0YXRpYy9qcy9jaGVja19jb25zdHJhaW50LmpzCmluZGV4IGJmN2VmNTU2Li5iMWNiMjUx OCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2NoZWNrX2NvbnN0cmFpbnQvc3Rh dGljL2pzL2NoZWNrX2NvbnN0cmFpbnQuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2 ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2No ZWNrX2NvbnN0cmFpbnQvc3RhdGljL2pzL2NoZWNrX2NvbnN0cmFpbnQuanMKQEAgLTgsNyArOCw2 IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmNoZWNrX2NvbnN0cmFpbnQnLCBbCiAgIC8vIENoZWNr IENvbnN0cmFpbnQgTm9kZQogICBpZiAoIXBnQnJvd3Nlci5Ob2Rlc1snY2hlY2tfY29uc3RyYWlu dCddKSB7CiAgICAgcGdBZG1pbi5Ccm93c2VyLk5vZGVzWydjaGVja19jb25zdHJhaW50J10gPSBw Z0Jyb3dzZXIuTm9kZS5leHRlbmQoewotICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6IHBnQnJv d3Nlci50YWJsZUNoaWxkVHJlZU5vZGVIaWVyYXJjaHksCiAgICAgICB0eXBlOiAnY2hlY2tfY29u c3RyYWludCcsCiAgICAgICBsYWJlbDogZ2V0dGV4dCgnQ2hlY2snKSwKICAgICAgIGNvbGxlY3Rp b25fdHlwZTogJ2NvbGwtY29uc3RyYWludHMnLApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJv d3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0 cmFpbnRzL2V4Y2x1c2lvbl9jb25zdHJhaW50L3N0YXRpYy9qcy9leGNsdXNpb25fY29uc3RyYWlu dC5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNl cy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9leGNsdXNpb25fY29uc3RyYWludC9zdGF0aWMv anMvZXhjbHVzaW9uX2NvbnN0cmFpbnQuanMKaW5kZXggMGJiZjY2YTEuLmFkY2NmMmU5IDEwMDY0 NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFz ZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvZXhjbHVzaW9uX2NvbnN0cmFpbnQvc3RhdGlj L2pzL2V4Y2x1c2lvbl9jb25zdHJhaW50LmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2Vy dmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9l eGNsdXNpb25fY29uc3RyYWludC9zdGF0aWMvanMvZXhjbHVzaW9uX2NvbnN0cmFpbnQuanMKQEAg LTYwNSw3ICs2MDUsNiBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS5leGNsdXNpb25fY29uc3RyYWlu dCcsIFsKICAgLy8gRXh0ZW5kIHRoZSBicm93c2VyJ3Mgbm9kZSBjbGFzcyBmb3IgZXhjbHVzaW9u IGNvbnN0cmFpbnQgbm9kZQogICBpZiAoIXBnQnJvd3Nlci5Ob2Rlc1snZXhjbHVzaW9uX2NvbnN0 cmFpbnQnXSkgewogICAgIHBnQWRtaW4uQnJvd3Nlci5Ob2Rlc1snZXhjbHVzaW9uX2NvbnN0cmFp bnQnXSA9IHBnQnJvd3Nlci5Ob2RlLmV4dGVuZCh7Ci0gICAgICBnZXRUcmVlTm9kZUhpZXJhcmNo eTogcGdCcm93c2VyLnRhYmxlQ2hpbGRUcmVlTm9kZUhpZXJhcmNoeSwKICAgICAgIHR5cGU6ICdl eGNsdXNpb25fY29uc3RyYWludCcsCiAgICAgICBsYWJlbDogZ2V0dGV4dCgnRXhjbHVzaW9uIGNv bnN0cmFpbnQnKSwKICAgICAgIGNvbGxlY3Rpb25fdHlwZTogJ2NvbGwtY29uc3RyYWludHMnLApk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2ZvcmVpZ25fa2V5L3N0YXRpYy9qcy9m b3JlaWduX2tleS5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9mb3JlaWduX2tleS9zdGF0aWMv anMvZm9yZWlnbl9rZXkuanMKaW5kZXggNDk5N2QxNzUuLjc4OGNlY2ZjIDEwMDY0NAotLS0gYS93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvY29uc3RyYWludHMvZm9yZWlnbl9rZXkvc3RhdGljL2pzL2ZvcmVpZ25fa2V5Lmpz CisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNl cy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9mb3JlaWduX2tleS9zdGF0aWMvanMvZm9yZWln bl9rZXkuanMKQEAgLTYwMyw3ICs2MDMsNiBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS5mb3JlaWdu X2tleScsIFsKICAgLy8gRXh0ZW5kIHRoZSBicm93c2VyJ3Mgbm9kZSBjbGFzcyBmb3IgZm9yZWln biBrZXkgbm9kZQogICBpZiAoIXBnQnJvd3Nlci5Ob2Rlc1snZm9yZWlnbl9rZXknXSkgewogICAg IHBnQWRtaW4uQnJvd3Nlci5Ob2Rlc1snZm9yZWlnbl9rZXknXSA9IHBnQnJvd3Nlci5Ob2RlLmV4 dGVuZCh7Ci0gICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdCcm93c2VyLnRhYmxlQ2hpbGRU cmVlTm9kZUhpZXJhcmNoeSwKICAgICAgIHR5cGU6ICdmb3JlaWduX2tleScsCiAgICAgICBsYWJl bDogZ2V0dGV4dCgnRm9yZWlnbiBrZXknKSwKICAgICAgIGNvbGxlY3Rpb25fdHlwZTogJ2NvbGwt Y29uc3RyYWludHMnLApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3Jv dXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2luZGV4X2Nv bnN0cmFpbnQvc3RhdGljL2pzL3ByaW1hcnlfa2V5LmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9z ZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRz L2luZGV4X2NvbnN0cmFpbnQvc3RhdGljL2pzL3ByaW1hcnlfa2V5LmpzCmluZGV4IGQzYTZjZmY0 Li4wYWQwZjA1NCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2luZGV4X2NvbnN0 cmFpbnQvc3RhdGljL2pzL3ByaW1hcnlfa2V5LmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIv c2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50 cy9pbmRleF9jb25zdHJhaW50L3N0YXRpYy9qcy9wcmltYXJ5X2tleS5qcwpAQCAtMjAsNyArMjAs NiBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS5wcmltYXJ5X2tleScsIFsKICAgICAgIHBhcmVudF90 eXBlOiBbJ3RhYmxlJywncGFydGl0aW9uJ10sCiAgICAgICBjYW5Ecm9wOiB0cnVlLAogICAgICAg Y2FuRHJvcENhc2NhZGU6IHRydWUsCi0gICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdCcm93 c2VyLnRhYmxlQ2hpbGRUcmVlTm9kZUhpZXJhcmNoeSwKICAgICAgIEluaXQ6IGZ1bmN0aW9uKCkg ewogICAgICAgICAvKiBBdm9pZCBtdWx0aXBsZSByZWdpc3RyYXRpb24gb2YgbWVudXMgKi8KICAg ICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93 c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3Ry YWludHMvaW5kZXhfY29uc3RyYWludC9zdGF0aWMvanMvdW5pcXVlX2NvbnN0cmFpbnQuanMgYi93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvY29uc3RyYWludHMvaW5kZXhfY29uc3RyYWludC9zdGF0aWMvanMvdW5pcXVlX2Nv bnN0cmFpbnQuanMKaW5kZXggNzY5MTg1ZDYuLjE4ZDNjYTMzIDEwMDY0NAotLS0gYS93ZWIvcGdh ZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJs ZXMvY29uc3RyYWludHMvaW5kZXhfY29uc3RyYWludC9zdGF0aWMvanMvdW5pcXVlX2NvbnN0cmFp bnQuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2luZGV4X2NvbnN0cmFpbnQvc3RhdGlj L2pzL3VuaXF1ZV9jb25zdHJhaW50LmpzCkBAIC0yMCw3ICsyMCw2IEBAIGRlZmluZSgncGdhZG1p bi5ub2RlLnVuaXF1ZV9jb25zdHJhaW50JywgWwogICAgICAgcGFyZW50X3R5cGU6IFsndGFibGUn LCdwYXJ0aXRpb24nXSwKICAgICAgIGNhbkRyb3A6IHRydWUsCiAgICAgICBjYW5Ecm9wQ2FzY2Fk ZTogdHJ1ZSwKLSAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVDaGls ZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgSW5pdDogZnVuY3Rpb24oKSB7CiAgICAgICAgIC8q IEF2b2lkIG11bHRpcGxlIHJlZ2lzdHJhdGlvbiBvZiBtZW51cyAqLwogICAgICAgICBpZiAodGhp cy5pbml0aWFsaXplZCkKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dy b3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9zdGF0aWMv anMvY29uc3RyYWludHMuanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvc3RhdGljL2pzL2NvbnN0 cmFpbnRzLmpzCmluZGV4IGNiMjQyY2QyLi45YzBlMjRmZSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVz L2NvbnN0cmFpbnRzL3N0YXRpYy9qcy9jb25zdHJhaW50cy5qcworKysgYi93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29u c3RyYWludHMvc3RhdGljL2pzL2NvbnN0cmFpbnRzLmpzCkBAIC0xMiwxNCArMTIsMTIgQEAgZGVm aW5lKCdwZ2FkbWluLm5vZGUuY29uc3RyYWludHMnLCBbCiAgICAgICAgIG5vZGU6ICdjb25zdHJh aW50cycsCiAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDb25zdHJhaW50cycpLAogICAgICAgICB0 eXBlOiAnY29sbC1jb25zdHJhaW50cycsCi0gICAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBw Z0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgICBjb2x1bW5zOiBb J25hbWUnLCAnY29tbWVudCddLAogICAgICAgfSk7CiAgIH0KCiAgIGlmICghcGdCcm93c2VyLk5v ZGVzWydjb25zdHJhaW50cyddKSB7CiAgICAgcGdBZG1pbi5Ccm93c2VyLk5vZGVzWydjb25zdHJh aW50cyddID0gcGdCcm93c2VyLk5vZGUuZXh0ZW5kKHsKLSAgICAgIGdldFRyZWVOb2RlSGllcmFy Y2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgdHlwZTog J2NvbnN0cmFpbnRzJywKICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDb25zdHJhaW50cycpLAogICAg ICAgY29sbGVjdGlvbl90eXBlOiAnY29sbC1jb25zdHJhaW50cycsCmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90 YWJsZXMvaW5kZXhlcy9zdGF0aWMvanMvaW5kZXguanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3Nl cnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvaW5kZXhlcy9zdGF0 aWMvanMvaW5kZXguanMKaW5kZXggZWMyYjRkYTEuLjJiNjg3YzFhIDEwMDY0NAotLS0gYS93ZWIv cGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90 YWJsZXMvaW5kZXhlcy9zdGF0aWMvanMvaW5kZXguanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2luZGV4ZXMv c3RhdGljL2pzL2luZGV4LmpzCkBAIC0xMyw3ICsxMyw2IEBAIGRlZmluZSgncGdhZG1pbi5ub2Rl LmluZGV4JywgWwogICAgICAgICBub2RlOiAnaW5kZXgnLAogICAgICAgICBsYWJlbDogZ2V0dGV4 dCgnSW5kZXhlcycpLAogICAgICAgICB0eXBlOiAnY29sbC1pbmRleCcsCi0gICAgICAgIGdldFRy ZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAog ICAgICAgICBzcWxBbHRlckhlbHA6ICdzcWwtYWx0ZXJpbmRleC5odG1sJywKICAgICAgICAgc3Fs Q3JlYXRlSGVscDogJ3NxbC1jcmVhdGVpbmRleC5odG1sJywKICAgICAgICAgZGlhbG9nSGVscDog dXJsX2ZvcignaGVscC5zdGF0aWMnLCB7J2ZpbGVuYW1lJzogJ2luZGV4X2RpYWxvZy5odG1sJ30p LApAQCAtMjE1LDcgKzIxNCw2IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmluZGV4JywgWwoKICAg aWYgKCFwZ0Jyb3dzZXIuTm9kZXNbJ2luZGV4J10pIHsKICAgICBwZ0FkbWluLkJyb3dzZXIuTm9k ZXNbJ2luZGV4J10gPSBwZ0Jyb3dzZXIuTm9kZS5leHRlbmQoewotICAgICAgZ2V0VHJlZU5vZGVI aWVyYXJjaHk6IHBnQnJvd3Nlci50YWJsZUNoaWxkVHJlZU5vZGVIaWVyYXJjaHksCiAgICAgICBw YXJlbnRfdHlwZTogWyd0YWJsZScsICd2aWV3JywgJ212aWV3JywgJ3BhcnRpdGlvbiddLAogICAg ICAgY29sbGVjdGlvbl90eXBlOiBbJ2NvbGwtdGFibGUnLCAnY29sbC12aWV3J10sCiAgICAgICBz cWxBbHRlckhlbHA6ICdzcWwtYWx0ZXJpbmRleC5odG1sJywKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxl cy9wYXJ0aXRpb25zL3N0YXRpYy9qcy9wYXJ0aXRpb24uanMgYi93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcGFydGl0aW9u cy9zdGF0aWMvanMvcGFydGl0aW9uLmpzCmluZGV4IGZkNTNmNzQzLi5lZjhlYjUzNCAxMDA2NDQK LS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2Vz L3NjaGVtYXMvdGFibGVzL3BhcnRpdGlvbnMvc3RhdGljL2pzL3BhcnRpdGlvbi5qcworKysgYi93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvcGFydGl0aW9ucy9zdGF0aWMvanMvcGFydGl0aW9uLmpzCkBAIC0xLDEwICsxLDEy IEBACiBkZWZpbmUoWworICAnc291cmNlcy90cmVlL3BnYWRtaW5fdHJlZV9ub2RlJywKICAgJ3Nv dXJjZXMvZ2V0dGV4dCcsICdzb3VyY2VzL3VybF9mb3InLCAnanF1ZXJ5JywgJ3VuZGVyc2NvcmUn LAogICAndW5kZXJzY29yZS5zdHJpbmcnLCAnc291cmNlcy9wZ2FkbWluJywgJ3BnYWRtaW4uYnJv d3NlcicsCiAgICdwZ2FkbWluLmFsZXJ0aWZ5anMnLCAncGdhZG1pbi5iYWNrZm9ybScsICdwZ2Fk bWluLmJhY2tncmlkJywKICAgJ3BnYWRtaW4uYnJvd3Nlci5jb2xsZWN0aW9uJywgJ3BnYWRtaW4u YnJvd3Nlci50YWJsZS5wYXJ0aXRpb24udXRpbHMnLAogXSwKIGZ1bmN0aW9uKAorICBwZ2FkbWlu VHJlZU5vZGUsCiAgIGdldHRleHQsIHVybF9mb3IsICQsIF8sIFMsIHBnQWRtaW4sIHBnQnJvd3Nl ciwgQWxlcnRpZnksIEJhY2tmb3JtLCBCYWNrZ3JpZAogKSB7CgpAQCAtMTMsNyArMTUsNiBAQCBm dW5jdGlvbigKICAgICAgIHBnQWRtaW4uQnJvd3Nlci5Db2xsZWN0aW9uLmV4dGVuZCh7CiAgICAg ICAgIG5vZGU6ICdwYXJ0aXRpb24nLAogICAgICAgICBsYWJlbDogZ2V0dGV4dCgnUGFydGl0aW9u cycpLAotICAgICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdCcm93c2VyLnRhYmxlQ2hpbGRU cmVlTm9kZUhpZXJhcmNoeSwKICAgICAgICAgdHlwZTogJ2NvbGwtcGFydGl0aW9uJywKICAgICAg ICAgY29sdW1uczogWwogICAgICAgICAgICduYW1lJywgJ3NjaGVtYScsICdwYXJ0aXRpb25fdmFs dWUnLCAnaXNfcGFydGl0aW9uZWQnLCAnZGVzY3JpcHRpb24nLApAQCAtODAsMzYgKzgxLDYgQEAg ZnVuY3Rpb24oCiAgICAgICAgIH0sCiAgICAgICAgIF0pOwogICAgICAgfSwKLSAgICAgIGdldFRy ZWVOb2RlSGllcmFyY2h5OiBmdW5jdGlvbihpKSB7Ci0gICAgICAgIHZhciBpZHggPSAwLAotICAg ICAgICAgIHJlcyA9IHt9LAotICAgICAgICAgIHQgPSBwZ0Jyb3dzZXIudHJlZTsKLQotICAgICAg ICBkbyB7Ci0gICAgICAgICAgdmFyIGQgPSB0Lml0ZW1EYXRhKGkpOwotICAgICAgICAgIGlmICgK LSAgICAgICAgICAgIGQuX3R5cGUgaW4gcGdCcm93c2VyLk5vZGVzICYmIHBnQnJvd3Nlci5Ob2Rl c1tkLl90eXBlXS5oYXNJZAotICAgICAgICAgICkgewotICAgICAgICAgICAgaWYgKGQuX3R5cGUg PT0gJ3BhcnRpdGlvbicgJiYgJ3BhcnRpdGlvbicgaW4gcmVzKSB7Ci0gICAgICAgICAgICAgIGlm ICghKCd0YWJsZScgaW4gcmVzKSkgewotICAgICAgICAgICAgICAgIHJlc1sndGFibGUnXSA9IF8u ZXh0ZW5kKHt9LCBkLCB7J3ByaW9yaXR5JzogaWR4fSk7Ci0gICAgICAgICAgICAgICAgaWR4IC09 IDE7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZC5fdHlwZSA9PSAn dGFibGUnKSB7Ci0gICAgICAgICAgICAgIGlmICghKCd0YWJsZScgaW4gcmVzKSkgewotICAgICAg ICAgICAgICAgIHJlc1sndGFibGUnXSA9IF8uZXh0ZW5kKHt9LCBkLCB7J3ByaW9yaXR5JzogaWR4 fSk7Ci0gICAgICAgICAgICAgICAgaWR4IC09IDE7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHJlc1tkLl90eXBlXSA9IF8uZXh0ZW5kKHt9LCBk LCB7J3ByaW9yaXR5JzogaWR4fSk7Ci0gICAgICAgICAgICAgIGlkeCAtPSAxOwotICAgICAgICAg ICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVu dChpKSA6IG51bGw7Ci0gICAgICAgIH0gd2hpbGUgKGkpOwotCi0gICAgICAgIHJldHVybiByZXM7 Ci0gICAgICB9LAogICAgICAgZ2VuZXJhdGVfdXJsOiBmdW5jdGlvbihpdGVtLCB0eXBlLCBkLCB3 aXRoX2lkLCBpbmZvKSB7CiAgICAgICAgIGlmIChfLmluZGV4T2YoWwogICAgICAgICAgICdzdGF0 cycsICdzdGF0aXN0aWNzJywgJ2RlcGVuZGVuY3knLCAnZGVwZW5kZW50JywgJ3Jlc2V0JywKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9zY2hlbWFzL3RhYmxlcy9ydWxlcy9zdGF0aWMvanMvcnVsZS5qcyBiL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9y dWxlcy9zdGF0aWMvanMvcnVsZS5qcwppbmRleCAzYWY2MTc1NC4uMzU0OTA5ZjMgMTAwNjQ0Ci0t LSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9z Y2hlbWFzL3RhYmxlcy9ydWxlcy9zdGF0aWMvanMvcnVsZS5qcworKysgYi93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcnVs ZXMvc3RhdGljL2pzL3J1bGUuanMKQEAgLTE2LDcgKzE2LDYgQEAgZGVmaW5lKCdwZ2FkbWluLm5v ZGUucnVsZScsIFsKICAgICAgICAgbm9kZTogJ3J1bGUnLAogICAgICAgICBsYWJlbDogZ2V0dGV4 dCgnUnVsZXMnKSwKICAgICAgICAgdHlwZTogJ2NvbGwtcnVsZScsCi0gICAgICAgIGdldFRyZWVO b2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAg ICAgICBjb2x1bW5zOiBbJ25hbWUnLCAnb3duZXInLCAnY29tbWVudCddLAogICAgICAgfSk7CiAg IH0KQEAgLTM1LDcgKzM0LDYgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUucnVsZScsIFsKICAgICov CiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydydWxlJ10pIHsKICAgICBwZ0FkbWluLkJyb3dzZXIu Tm9kZXNbJ3J1bGUnXSA9IHBnQnJvd3Nlci5Ob2RlLmV4dGVuZCh7Ci0gICAgICBnZXRUcmVlTm9k ZUhpZXJhcmNoeTogcGdCcm93c2VyLnRhYmxlQ2hpbGRUcmVlTm9kZUhpZXJhcmNoeSwKICAgICAg IHBhcmVudF90eXBlOiBbJ3RhYmxlJywndmlldycsICdwYXJ0aXRpb24nXSwKICAgICAgIHR5cGU6 ICdydWxlJywKICAgICAgIHNxbEFsdGVySGVscDogJ3NxbC1hbHRlcnJ1bGUuaHRtbCcsCmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFz ZXMvc2NoZW1hcy90YWJsZXMvc3RhdGljL2pzL3RhYmxlLmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3N0YXRpYy9q cy90YWJsZS5qcwppbmRleCA2NDdkMWJmZS4uOTlkNjAyNDMgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxl cy9zdGF0aWMvanMvdGFibGUuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3Jv dXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3N0YXRpYy9qcy90YWJsZS5qcwpA QCAtMjYsNyArMjYsNiBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS50YWJsZScsIFsKCiAgIGlmICgh cGdCcm93c2VyLk5vZGVzWyd0YWJsZSddKSB7CiAgICAgcGdCcm93c2VyLk5vZGVzWyd0YWJsZSdd ID0gcGdCcm93c2VyLk5vZGUuZXh0ZW5kKHsKLSAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBw Z0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgdHlwZTogJ3RhYmxl JywKICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdUYWJsZScpLAogICAgICAgY29sbGVjdGlvbl90eXBl OiAnY29sbC10YWJsZScsCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdHJpZ2dlcnMvc3RhdGljL2pz L3RyaWdnZXIuanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdHJpZ2dlcnMvc3RhdGljL2pzL3RyaWdnZXIuanMKaW5k ZXggZmJlNzY1OWUuLjlhMWNlMmUwIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3Nl cnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdHJpZ2dlcnMvc3Rh dGljL2pzL3RyaWdnZXIuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RyaWdnZXJzL3N0YXRpYy9qcy90cmln Z2VyLmpzCkBAIC0yOSwxNCArMjksMTIgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudHJpZ2dlcics IFsKICAgICAgICAgbm9kZTogJ3RyaWdnZXInLAogICAgICAgICBsYWJlbDogZ2V0dGV4dCgnVHJp Z2dlcnMnKSwKICAgICAgICAgdHlwZTogJ2NvbGwtdHJpZ2dlcicsCi0gICAgICAgIGdldFRyZWVO b2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAg ICAgICBjb2x1bW5zOiBbJ25hbWUnLCAnZGVzY3JpcHRpb24nXSwKICAgICAgIH0pOwogICB9Cgog ICBpZiAoIXBnQnJvd3Nlci5Ob2Rlc1sndHJpZ2dlciddKSB7CiAgICAgcGdBZG1pbi5Ccm93c2Vy Lk5vZGVzWyd0cmlnZ2VyJ10gPSBwZ0Jyb3dzZXIuTm9kZS5leHRlbmQoewotICAgICAgZ2V0VHJl ZU5vZGVIaWVyYXJjaHk6IHBnQnJvd3Nlci50YWJsZUNoaWxkVHJlZU5vZGVIaWVyYXJjaHksCiAg ICAgICBwYXJlbnRfdHlwZTogWyd0YWJsZScsICd2aWV3JywgJ3BhcnRpdGlvbiddLAogICAgICAg Y29sbGVjdGlvbl90eXBlOiBbJ2NvbGwtdGFibGUnLCAnY29sbC12aWV3J10sCiAgICAgICB0eXBl OiAndHJpZ2dlcicsCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3N0YXRpYy9qcy9i cm93c2VyLmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvYnJvd3Nlci5qcwppbmRl eCA0NmI2MDMzMi4uZDM4MDQ5ZGIgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3Rh dGljL2pzL2Jyb3dzZXIuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvYnJv d3Nlci5qcwpAQCAtMSw0ICsxLDUgQEAKIGRlZmluZSgncGdhZG1pbi5icm93c2VyJywgWworICAn c291cmNlcy90cmVlL3RyZWUnLAogICAnc291cmNlcy9nZXR0ZXh0JywgJ3NvdXJjZXMvdXJsX2Zv cicsICdyZXF1aXJlJywgJ2pxdWVyeScsICd1bmRlcnNjb3JlJywgJ3VuZGVyc2NvcmUuc3RyaW5n JywKICAgJ2Jvb3RzdHJhcCcsICdzb3VyY2VzL3BnYWRtaW4nLCAncGdhZG1pbi5hbGVydGlmeWpz JywgJ2J1bmRsZWRfY29kZW1pcnJvcicsCiAgICdzb3VyY2VzL2NoZWNrX25vZGVfdmlzaWJpbGl0 eScsICdwZ2FkbWluLmJyb3dzZXIudXRpbHMnLCAnd2Nkb2NrZXInLApAQCAtMTAsNiArMTEsNyBA QCBkZWZpbmUoJ3BnYWRtaW4uYnJvd3NlcicsIFsKICAgJ3NvdXJjZXMvY29kZW1pcnJvci9hZGRv bi9mb2xkL3BnYWRtaW4tc3FsZm9sZGNvZGUnLAogICAncGdhZG1pbi5icm93c2VyLmtleWJvYXJk JywKIF0sIGZ1bmN0aW9uKAorICB0cmVlLAogICBnZXR0ZXh0LCB1cmxfZm9yLCByZXF1aXJlLCAk LCBfLCBTLCBCb290c3RyYXAsIHBnQWRtaW4sIEFsZXJ0aWZ5LAogICBjb2RlbWlycm9yLCBjaGVj a05vZGVWaXNpYmlsaXR5CiApIHsKQEAgLTg0LDYgKzg2LDcgQEAgZGVmaW5lKCdwZ2FkbWluLmJy b3dzZXInLCBbCiAgICAgICB9KTsKCiAgICAgICBiLnRyZWUgPSAkKCcjdHJlZScpLmFjaVRyZWUo J2FwaScpOworICAgICAgYi50cmVlTWVudS5yZWdpc3RlcigkKCcjdHJlZScpKTsKICAgICB9OwoK ICAgLy8gRXh0ZW5kIHRoZSBicm93c2VyIGNsYXNzIGF0dHJpYnV0ZXMKQEAgLTk4LDYgKzEwMSw3 IEBAIGRlZmluZSgncGdhZG1pbi5icm93c2VyJywgWwogICAgIGVkaXRvcjpudWxsLAogICAgIC8v IExlZnQgaGFuZCBicm93c2VyIHRyZWUKICAgICB0cmVlOm51bGwsCisgICAgdHJlZU1lbnU6IG5l dyB0cmVlLlRyZWUoKSwKICAgICAvLyBsaXN0IG9mIHNjcmlwdCB0byBiZSBsb2FkZWQsIHdoZW4g YSBjZXJ0YWluIHR5cGUgb2Ygbm9kZSBpcyBsb2FkZWQKICAgICAvLyBJdCB3aWxsIGJlIHVzZWQg dG8gcmVnaXN0ZXIgZXh0ZW5zaW9ucywgdG9vbHMsIGNoaWxkIG5vZGUgc2NyaXB0cywKICAgICAv LyBldGMuCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3N0YXRpYy9qcy9ub2RlLmpz IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvbm9kZS5qcwppbmRleCBhZDU4MjQ4My4u M2JhZjU1NGEgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2pzL25vZGUu anMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvbm9kZS5qcwpAQCAtMSw5ICsx LDEyIEBACiBkZWZpbmUoJ3BnYWRtaW4uYnJvd3Nlci5ub2RlJywgWworICAnc291cmNlcy90cmVl L3BnYWRtaW5fdHJlZV9ub2RlJywKICAgJ3NvdXJjZXMvZ2V0dGV4dCcsICdqcXVlcnknLCAndW5k ZXJzY29yZScsICd1bmRlcnNjb3JlLnN0cmluZycsICdzb3VyY2VzL3BnYWRtaW4nLAogICAncGdh ZG1pbi5icm93c2VyLm1lbnUnLCAnYmFja2JvbmUnLCAncGdhZG1pbi5hbGVydGlmeWpzJywgJ3Bn YWRtaW4uYnJvd3Nlci5kYXRhbW9kZWwnLAogICAnYmFja2Zvcm0nLCAnc291cmNlcy9icm93c2Vy L2dlbmVyYXRlX3VybCcsICdzb3VyY2VzL3V0aWxzJywgJ3BnYWRtaW4uYnJvd3Nlci51dGlscycs CiAgICdwZ2FkbWluLmJhY2tmb3JtJywKLV0sIGZ1bmN0aW9uKGdldHRleHQsICQsIF8sIFMsIHBn QWRtaW4sIE1lbnUsIEJhY2tib25lLCBBbGVydGlmeSwgcGdCcm93c2VyLCBCYWNrZm9ybSwgZ2Vu ZXJhdGVVcmwsIGNvbW1vblV0aWxzKSB7CitdLCBmdW5jdGlvbigKKyAgcGdhZG1pblRyZWVOb2Rl LAorICBnZXR0ZXh0LCAkLCBfLCBTLCBwZ0FkbWluLCBNZW51LCBCYWNrYm9uZSwgQWxlcnRpZnks IHBnQnJvd3NlciwgQmFja2Zvcm0sIGdlbmVyYXRlVXJsLCBjb21tb25VdGlscykgewoKICAgdmFy IHdjRG9ja2VyID0gd2luZG93LndjRG9ja2VyLAogICAgIGtleUNvZGUgPSB7CkBAIC0xNTY2LDcg KzE1NjksNiBAQCBkZWZpbmUoJ3BnYWRtaW4uYnJvd3Nlci5ub2RlJywgWwogICAgICAqIGRlcGVu ZHMsIHN0YXRpc3RpY3MKICAgICAgKi8KICAgICBnZW5lcmF0ZV91cmw6IGZ1bmN0aW9uKGl0ZW0s IHR5cGUsIGQsIHdpdGhfaWQsIGluZm8pIHsKLQogICAgICAgdmFyIG9wVVJMID0gewogICAgICAg ICAgICdjcmVhdGUnOiAnb2JqJywKICAgICAgICAgICAnZHJvcCc6ICdvYmonLApAQCAtMTYwOCwy NCArMTYxMCw3IEBAIGRlZmluZSgncGdhZG1pbi5icm93c2VyLm5vZGUnLCBbCiAgICAgQ29sbGVj dGlvbjogcGdCcm93c2VyLkRhdGFDb2xsZWN0aW9uLAogICAgIC8vIEJhc2UgY2xhc3MgZm9yIE5v ZGUgRGF0YSBNb2RlbAogICAgIE1vZGVsOiBwZ0Jyb3dzZXIuRGF0YU1vZGVsLAotICAgIGdldFRy ZWVOb2RlSGllcmFyY2h5OiBmdW5jdGlvbihpKSB7Ci0gICAgICB2YXIgaWR4ID0gMCwKLSAgICAg ICAgcmVzID0ge30sCi0gICAgICAgIHQgPSBwZ0Jyb3dzZXIudHJlZSwKLSAgICAgICAgZDsKLSAg ICAgIGRvIHsKLSAgICAgICAgZCA9IHQuaXRlbURhdGEoaSk7Ci0gICAgICAgIGlmIChkLl90eXBl IGluIHBnQnJvd3Nlci5Ob2RlcyAmJiBwZ0Jyb3dzZXIuTm9kZXNbZC5fdHlwZV0uaGFzSWQpIHsK LSAgICAgICAgICByZXNbZC5fdHlwZV0gPSBfLmV4dGVuZCh7fSwgZCwgewotICAgICAgICAgICAg J3ByaW9yaXR5JzogaWR4LAotICAgICAgICAgIH0pOwotICAgICAgICAgIGlkeCAtPSAxOwotICAg ICAgICB9Ci0gICAgICAgIGkgPSB0Lmhhc1BhcmVudChpKSA/IHQucGFyZW50KGkpIDogbnVsbDsK LSAgICAgIH0gd2hpbGUgKGkpOwotCi0gICAgICByZXR1cm4gcmVzOwotICAgIH0sCisgICAgZ2V0 VHJlZU5vZGVIaWVyYXJjaHk6IHBnYWRtaW5UcmVlTm9kZS5nZXRUcmVlTm9kZUhpZXJhcmNoeUZy b21JZGVudGlmaWVyLmJpbmQocGdCcm93c2VyKSwKICAgICBjYWNoZTogZnVuY3Rpb24odXJsLCBu b2RlX2luZm8sIGxldmVsLCBkYXRhKSB7CiAgICAgICB2YXIgY2FjaGVkID0gdGhpcy5jYWNoZWQg PSB0aGlzLmNhY2hlZCB8fCB7fSwKICAgICAgICAgaGFzaCA9IHVybCwKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNrdXAvYmFja3VwX2RpYWxvZy5qcyBiL3dlYi9wZ2FkbWlu L3N0YXRpYy9qcy9iYWNrdXAvYmFja3VwX2RpYWxvZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMC4uNzc5MTcwZWUKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9z dGF0aWMvanMvYmFja3VwL2JhY2t1cF9kaWFsb2cuanMKQEAgLTAsMCArMSwxNDIgQEAKKy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K Ky8vCisvLyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisvLworLy8gQ29weXJpZ2h0IChD KSAyMDEzIC0gMjAxOCwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorLy8gVGhpcyBzb2Z0 d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisvLworLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K KworaW1wb3J0IGdldHRleHQgZnJvbSAnLi4vZ2V0dGV4dCc7CitpbXBvcnQge3NwcmludGZ9IGZy b20gJ3NwcmludGYtanMnOworaW1wb3J0IEJhY2tmb3JtIGZyb20gJy4uL2JhY2tmb3JtLnBnYWRt aW4nOworaW1wb3J0IHtEaWFsb2dGYWN0b3J5fSBmcm9tICcuL2JhY2t1cF9kaWFsb2dfZmFjdG9y eSc7CisKK2V4cG9ydCBjbGFzcyBCYWNrdXBEaWFsb2cgeworICBjb25zdHJ1Y3RvcihwZ0Jyb3dz ZXIsICQsIGFsZXJ0aWZ5LCBCYWNrdXBNb2RlbCwgYmFja2Zvcm0gPSBCYWNrZm9ybSkgeworICAg IHRoaXMucGdCcm93c2VyID0gcGdCcm93c2VyOworICAgIHRoaXMuanF1ZXJ5ID0gJDsKKyAgICB0 aGlzLmFsZXJ0aWZ5ID0gYWxlcnRpZnk7CisgICAgdGhpcy5iYWNrdXBNb2RlbCA9IEJhY2t1cE1v ZGVsOworICAgIHRoaXMuYmFja2Zvcm0gPSBiYWNrZm9ybTsKKyAgfQorCisgIGRyYXcoYWN0aW9u LCBpdGVtLCBwYXJhbXMpIHsKKyAgICBjb25zdCBzZXJ2ZXJJbmZvcm1hdGlvbiA9IHRoaXMucmV0 cmlldmVBbmNlc3Rvck9mVHlwZVNlcnZlcihpdGVtKTsKKworICAgIGlmICghc2VydmVySW5mb3Jt YXRpb24pIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXRoaXMuaGFzQmluYXJp ZXNDb25maWd1cmF0aW9uKHNlcnZlckluZm9ybWF0aW9uKSkgeworICAgICAgcmV0dXJuOworICAg IH0KKworICAgIGNvbnN0IHR5cGVPZkRpYWxvZyA9IEJhY2t1cERpYWxvZy50eXBlT2ZEaWFsb2co cGFyYW1zKTsKKworICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuY3JlYXRlT3JHZXREaWFsb2codHlw ZU9mRGlhbG9nKTsKKyAgICBkaWFsb2codHJ1ZSkucmVzaXplVG8oJzYwJScsICc1MCUnKTsKKyAg fQorCisgIHN0YXRpYyB0eXBlT2ZEaWFsb2cocGFyYW1zKSB7CisgICAgaWYocGFyYW1zID09PSBu dWxsKSB7CisgICAgICByZXR1cm4gJ2JhY2t1cF9vYmplY3RzJzsKKyAgICB9CisgICAgbGV0IHR5 cGVPZkRpYWxvZyA9ICdzZXJ2ZXInOworICAgIGlmICghXy5pc1VuZGVmaW5lZChwYXJhbXNbJ2ds b2JhbHMnXSkgJiYgcGFyYW1zWydnbG9iYWxzJ10pIHsKKyAgICAgIHR5cGVPZkRpYWxvZyA9ICdn bG9iYWxzJzsKKyAgICB9CisgICAgcmV0dXJuIHR5cGVPZkRpYWxvZzsKKyAgfQorCisgIHN0YXRp YyBkaWFsb2dUaXRsZSh0eXBlT2ZEaWFsb2cpIHsKKyAgICBpZih0eXBlT2ZEaWFsb2cgPT09ICdi YWNrdXBfb2JqZWN0cycpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4g KCh0eXBlT2ZEaWFsb2cgPT09ICdnbG9iYWxzJykgPworICAgICAgZ2V0dGV4dCgnQmFja3VwIEds b2JhbHMuLi4nKSA6CisgICAgICBnZXR0ZXh0KCdCYWNrdXAgU2VydmVyLi4uJykpOworICB9CisK KyAgY3JlYXRlT3JHZXREaWFsb2codHlwZU9mRGlhbG9nKSB7CisgICAgY29uc3QgZGlhbG9nTmFt ZSA9IHRoaXMuZGlhbG9nTmFtZSh0eXBlT2ZEaWFsb2cpOworICAgIGNvbnN0IGRpYWxvZ1RpdGxl ID0gQmFja3VwRGlhbG9nLmRpYWxvZ1RpdGxlKHR5cGVPZkRpYWxvZyk7CisKKyAgICBpZiAoIXRo aXMuYWxlcnRpZnlbZGlhbG9nTmFtZV0pIHsKKyAgICAgIGNvbnN0IHNlbGYgPSB0aGlzOworICAg ICAgdGhpcy5hbGVydGlmeS5kaWFsb2coZGlhbG9nTmFtZSwgZnVuY3Rpb24gZmFjdG9yeSgpIHsK KyAgICAgICAgcmV0dXJuIHNlbGYuZGlhbG9nRmFjdG9yeShkaWFsb2dUaXRsZSwgdHlwZU9mRGlh bG9nKTsKKyAgICAgIH0pOworICAgIH0KKyAgICByZXR1cm4gdGhpcy5hbGVydGlmeVtkaWFsb2dO YW1lXTsKKyAgfQorCisgIGRpYWxvZ05hbWUodHlwZU9mRGlhbG9nKSB7CisgICAgaWYodHlwZU9m RGlhbG9nID09PSAnYmFja3VwX29iamVjdHMnKSB7CisgICAgICByZXR1cm4gdHlwZU9mRGlhbG9n OworICAgIH0KKyAgICByZXR1cm4gJ0JhY2t1cERpYWxvZ18nICsgdHlwZU9mRGlhbG9nOworICB9 CisKKyAgaGFzQmluYXJpZXNDb25maWd1cmF0aW9uKHNlcnZlckluZm9ybWF0aW9uKSB7CisgICAg Y29uc3QgbW9kdWxlID0gJ3BhdGhzJzsKKyAgICBsZXQgcHJlZmVyZW5jZV9uYW1lID0gJ3BnX2Jp bl9kaXInOworICAgIGxldCBtc2cgPSBnZXR0ZXh0KCdQbGVhc2UgY29uZmlndXJlIHRoZSBQb3N0 Z3JlU1FMIEJpbmFyeSBQYXRoIGluIHRoZSBQcmVmZXJlbmNlcyBkaWFsb2cuJyk7CisKKyAgICBp ZiAoKHNlcnZlckluZm9ybWF0aW9uLnR5cGUgJiYgc2VydmVySW5mb3JtYXRpb24udHlwZSA9PT0g J3BwYXMnKSB8fAorICAgICAgc2VydmVySW5mb3JtYXRpb24uc2VydmVyX3R5cGUgPT09ICdwcGFz JykgeworICAgICAgcHJlZmVyZW5jZV9uYW1lID0gJ3BwYXNfYmluX2Rpcic7CisgICAgICBtc2cg PSBnZXR0ZXh0KCdQbGVhc2UgY29uZmlndXJlIHRoZSBFREIgQWR2YW5jZWQgU2VydmVyIEJpbmFy eSBQYXRoIGluIHRoZSBQcmVmZXJlbmNlcyBkaWFsb2cuJyk7CisgICAgfQorICAgIGNvbnN0IHBy ZWZlcmVuY2UgPSB0aGlzLnBnQnJvd3Nlci5nZXRfcHJlZmVyZW5jZShtb2R1bGUsIHByZWZlcmVu Y2VfbmFtZSk7CisKKyAgICBpZiAocHJlZmVyZW5jZSkgeworICAgICAgaWYgKCFwcmVmZXJlbmNl LnZhbHVlKSB7CisgICAgICAgIHRoaXMuYWxlcnRpZnkuYWxlcnQoZ2V0dGV4dCgnQ29uZmlndXJh dGlvbiByZXF1aXJlZCcpLCBtc2cpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9Cisg ICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuYWxlcnRpZnkuYWxlcnQoCisgICAgICAgIGdldHRleHQo J0JhY2t1cCBFcnJvcicpLAorICAgICAgICBzcHJpbnRmKGdldHRleHQoJ0ZhaWxlZCB0byBsb2Fk IHByZWZlcmVuY2UgJXMgb2YgbW9kdWxlICVzJyksIHByZWZlcmVuY2VfbmFtZSwgbW9kdWxlKQor ICAgICAgKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cisg IH0KKworICByZXRyaWV2ZUFuY2VzdG9yT2ZUeXBlU2VydmVyKGl0ZW0pIHsKKyAgICBsZXQgc2Vy dmVySW5mb3JtYXRpb24gPSBudWxsOworICAgIGxldCBhY2lUcmVlSXRlbSA9IGl0ZW0gfHwgdGhp cy5wZ0Jyb3dzZXIudHJlZU1lbnUuc2VsZWN0ZWQoKTsKKyAgICBsZXQgdHJlZU5vZGUgPSB0aGlz LnBnQnJvd3Nlci50cmVlTWVudS5maW5kTm9kZUJ5RG9tRWxlbWVudChhY2lUcmVlSXRlbSk7CisK KyAgICB3aGlsZSAodHJlZU5vZGUpIHsKKyAgICAgIGNvbnN0IG5vZGVfZGF0YSA9IHRyZWVOb2Rl LmdldERhdGEoKTsKKyAgICAgIGlmIChub2RlX2RhdGEuX3R5cGUgPT09ICdzZXJ2ZXInKSB7Cisg ICAgICAgIHNlcnZlckluZm9ybWF0aW9uID0gbm9kZV9kYXRhOworICAgICAgICBicmVhazsKKyAg ICAgIH0KKworICAgICAgaWYgKHRyZWVOb2RlLmhhc1BhcmVudCgpKSB7CisgICAgICAgIHRyZWVO b2RlID0gdHJlZU5vZGUucGFyZW50KCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLmFs ZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgIGdldHRleHQoJ0JhY2t1cCBFcnJvcicpLAorICAgICAg ICAgIGdldHRleHQoJ1BsZWFzZSBzZWxlY3Qgc2VydmVyIG9yIGNoaWxkIG5vZGUgZnJvbSB0aGUg YnJvd3NlciB0cmVlLicpCisgICAgICAgICk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAg IH0KKyAgICByZXR1cm4gc2VydmVySW5mb3JtYXRpb247CisgIH0KKworICBkaWFsb2dGYWN0b3J5 KGRpYWxvZ1RpdGxlLCB0eXBlT2ZEaWFsb2cpIHsKKyAgICBjb25zdCBmYWN0b3J5ID0gbmV3IERp YWxvZ0ZhY3RvcnkoCisgICAgICB0aGlzLnBnQnJvd3NlciwKKyAgICAgIHRoaXMuanF1ZXJ5LAor ICAgICAgdGhpcy5hbGVydGlmeSwKKyAgICAgIHRoaXMuYmFja3VwTW9kZWwsCisgICAgICB0aGlz LmJhY2tmb3JtKTsKKyAgICByZXR1cm4gZmFjdG9yeS5jcmVhdGUoZGlhbG9nVGl0bGUsIHR5cGVP ZkRpYWxvZyk7CisgIH0KK30KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNr dXAvYmFja3VwX2RpYWxvZ19mYWN0b3J5LmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2JhY2t1 cC9iYWNrdXBfZGlhbG9nX2ZhY3RvcnkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAuLjJmZDQ5MWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pz L2JhY2t1cC9iYWNrdXBfZGlhbG9nX2ZhY3RvcnkuanMKQEAgLTAsMCArMSw1NiBAQAorLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor Ly8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMp IDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3 YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor CitpbXBvcnQgKiBhcyBjb21tb25VdGlscyBmcm9tICcuLi91dGlscyc7CitpbXBvcnQge0RpYWxv Z1dyYXBwZXJ9IGZyb20gJy4vYmFja3VwX2RpYWxvZ193cmFwcGVyJzsKKworZXhwb3J0IGNsYXNz IERpYWxvZ0ZhY3RvcnkgeworICBjb25zdHJ1Y3RvcihwZ0Jyb3dzZXIsICQsIGFsZXJ0aWZ5LCBC YWNrdXBNb2RlbCwgYmFja2Zvcm0pIHsKKyAgICB0aGlzLnBnQnJvd3NlciA9IHBnQnJvd3NlcjsK KyAgICB0aGlzLmpxdWVyeSA9ICQ7CisgICAgdGhpcy5hbGVydGlmeSA9IGFsZXJ0aWZ5OworICAg IHRoaXMuYmFja3VwTW9kZWwgPSBCYWNrdXBNb2RlbDsKKyAgICB0aGlzLmJhY2tmb3JtID0gYmFj a2Zvcm07CisgIH0KKworICBjcmVhdGUoZGlhbG9nVGl0bGUsIHR5cGVPZkRpYWxvZykgeworICAg IGNvbnN0IGRpYWxvZ0NvbnRhaW5lclNlbGVjdG9yID0gJzxkaXYgY2xhc3M9XCdiYWNrdXBfZGlh bG9nXCc+PC9kaXY+JzsKKyAgICByZXR1cm4gbmV3IERpYWxvZ1dyYXBwZXIoZGlhbG9nQ29udGFp bmVyU2VsZWN0b3IsIHRoaXMsIGRpYWxvZ1RpdGxlLCB0eXBlT2ZEaWFsb2cpOworICB9CisKKyAg c3RhdGljIHdhc0JhY2t1cEJ1dHRvblByZXNzZWQoZXZlbnQpIHsKKyAgICByZXR1cm4gZXZlbnQu YnV0dG9uWydkYXRhLWJ0bi1uYW1lJ10gPT09ICdiYWNrdXAnOworICB9CisKKyAgc3RhdGljIHdh c0hlbHBCdXR0b25QcmVzc2VkKGUpIHsKKyAgICByZXR1cm4gZS5idXR0b24uZWxlbWVudC5uYW1l ID09PSAnZGlhbG9nX2hlbHAnCisgICAgICB8fCBlLmJ1dHRvbi5lbGVtZW50Lm5hbWUgPT09ICdv YmplY3RfaGVscCc7CisgIH0KKworICBzdGF0aWMgZ2V0U2VsZWN0ZWROb2RlKHNlbGVjdGVkVHJl ZU5vZGUpIHsKKyAgICBpZiAoIURpYWxvZ0ZhY3RvcnkuaXNOb2RlU2VsZWN0ZWQoc2VsZWN0ZWRU cmVlTm9kZSkpIHsKKyAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgfQorICAgIGNvbnN0IHRy ZWVOb2RlRGF0YSA9IHNlbGVjdGVkVHJlZU5vZGUuZ2V0RGF0YSgpOworICAgIGlmICh0cmVlTm9k ZURhdGEpIHsKKyAgICAgIHJldHVybiB0cmVlTm9kZURhdGE7CisgICAgfQorICAgIHJldHVybiB1 bmRlZmluZWQ7CisgIH0KKworICBzdGF0aWMgZm9jdXNPbkRpYWxvZyhkaWFsb2cpIHsKKyAgICBj b25zdCBjb250YWluZXIgPSBkaWFsb2cuJGVsLmZpbmQoJy50YWItY29udGVudDpmaXJzdCA+IC50 YWItcGFuZS5hY3RpdmU6Zmlyc3QnKTsKKyAgICBjb21tb25VdGlscy5maW5kQW5kU2V0Rm9jdXMo Y29udGFpbmVyKTsKKyAgfQorCisgIHN0YXRpYyBpc05vZGVTZWxlY3RlZChzZWxlY3RlZFRyZWVO b2RlKSB7CisgICAgcmV0dXJuIHNlbGVjdGVkVHJlZU5vZGU7CisgIH0KK30KKwpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2JhY2t1cC9iYWNrdXBfZGlhbG9nX3dyYXBwZXIuanMg Yi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja3VwL2JhY2t1cF9kaWFsb2dfd3JhcHBlci5qcwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZTVjODAzYzAKLS0tIC9kZXYvbnVs bAorKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja3VwL2JhY2t1cF9kaWFsb2dfd3JhcHBl ci5qcwpAQCAtMCwwICsxLDI3MCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVT UUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBE ZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQ b3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitpbXBvcnQge2dldFRyZWVOb2RlSGllcmFy Y2h5RnJvbUVsZW1lbnR9IGZyb20gJy4uL3RyZWUvcGdhZG1pbl90cmVlX25vZGUnOworaW1wb3J0 IGF4aW9zIGZyb20gJ2F4aW9zL2luZGV4JzsKK2ltcG9ydCB7RGlhbG9nRmFjdG9yeX0gZnJvbSAn Li9iYWNrdXBfZGlhbG9nX2ZhY3RvcnknOworaW1wb3J0IGdldHRleHQgZnJvbSAnLi4vZ2V0dGV4 dCc7CitpbXBvcnQgdXJsX2ZvciBmcm9tICcuLi91cmxfZm9yJzsKK2ltcG9ydCBfIGZyb20gJ3Vu ZGVyc2NvcmUnOworCitleHBvcnQgY2xhc3MgRGlhbG9nV3JhcHBlciB7CisgIGNvbnN0cnVjdG9y KGRpYWxvZ0NvbnRhaW5lclNlbGVjdG9yLCBmYWN0b3J5LCBkaWFsb2dUaXRsZSwgdHlwZU9mRGlh bG9nKSB7CisgICAgdGhpcy5ob29rcyA9IHsKKyAgICAgIC8vIFRyaWdnZXJlZCB3aGVuIHRoZSBk aWFsb2cgaXMgY2xvc2VkCisgICAgICBvbmNsb3NlOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlm ICh0aGlzLnZpZXcpIHsKKyAgICAgICAgICAvLyBjbGVhciBvdXIgYmFja2Zvcm0gbW9kZWwvdmll dworICAgICAgICAgIHRoaXMudmlldy5yZW1vdmUoeworICAgICAgICAgICAgZGF0YTogdHJ1ZSwK KyAgICAgICAgICAgIGludGVybmFsOiB0cnVlLAorICAgICAgICAgICAgc2lsZW50OiB0cnVlLAor ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICB9LAorICAgIH07CisgICAgdGhpcy5kaWFs b2dDb250YWluZXJTZWxlY3RvciA9IGRpYWxvZ0NvbnRhaW5lclNlbGVjdG9yOworICAgIHRoaXMu ZmFjdG9yeSA9IGZhY3Rvcnk7CisgICAgdGhpcy5kaWFsb2dUaXRsZSA9IGRpYWxvZ1RpdGxlOwor ICAgIHRoaXMudHlwZU9mRGlhbG9nID0gdHlwZU9mRGlhbG9nOworICB9CisKKyAgbWFpbih0aXRs ZSkgeworICAgIHRoaXMuc2V0KCd0aXRsZScsIHRpdGxlKTsKKyAgfQorCisgIGJ1aWxkKCkgewor ICAgIHRoaXMuZmFjdG9yeS5hbGVydGlmeS5wZ0RpYWxvZ0J1aWxkLmFwcGx5KHRoaXMpOworICB9 CisKKyAgc2V0dXAoKSB7CisgICAgcmV0dXJuIHsKKyAgICAgIGJ1dHRvbnM6IFt7CisgICAgICAg IHRleHQ6ICcnLAorICAgICAgICBjbGFzc05hbWU6ICdidG4gYnRuLWRlZmF1bHQgcHVsbC1sZWZ0 IGZhIGZhLWxnIGZhLWluZm8nLAorICAgICAgICBhdHRyczogeworICAgICAgICAgIG5hbWU6ICdv YmplY3RfaGVscCcsCisgICAgICAgICAgdHlwZTogJ2J1dHRvbicsCisgICAgICAgICAgdXJsOiAn YmFja3VwLmh0bWwnLAorICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdCYWNrdXAnKSwKKyAgICAg ICAgfSwKKyAgICAgIH0sIHsKKyAgICAgICAgdGV4dDogJycsCisgICAgICAgIGtleTogMTEyLAor ICAgICAgICBjbGFzc05hbWU6ICdidG4gYnRuLWRlZmF1bHQgcHVsbC1sZWZ0IGZhIGZhLWxnIGZh LXF1ZXN0aW9uJywKKyAgICAgICAgYXR0cnM6IHsKKyAgICAgICAgICBuYW1lOiAnZGlhbG9nX2hl bHAnLAorICAgICAgICAgIHR5cGU6ICdidXR0b24nLAorICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0 KCdCYWNrdXAnKSwKKyAgICAgICAgICB1cmw6IHVybF9mb3IoJ2hlbHAuc3RhdGljJywgeworICAg ICAgICAgICAgJ2ZpbGVuYW1lJzogJ2JhY2t1cF9kaWFsb2cuaHRtbCcsCisgICAgICAgICAgfSks CisgICAgICAgIH0sCisgICAgICB9LCB7CisgICAgICAgIHRleHQ6IGdldHRleHQoJ0JhY2t1cCcp LAorICAgICAgICBrZXk6IDEzLAorICAgICAgICBjbGFzc05hbWU6ICdidG4gYnRuLXByaW1hcnkg ZmEgZmEtbGcgZmEtc2F2ZSBwZy1hbGVydGlmeS1idXR0b24nLAorICAgICAgICAnZGF0YS1idG4t bmFtZSc6ICdiYWNrdXAnLAorICAgICAgfSwgeworICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdDYW5j ZWwnKSwKKyAgICAgICAga2V5OiAyNywKKyAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1kYW5n ZXIgZmEgZmEtbGcgZmEtdGltZXMgcGctYWxlcnRpZnktYnV0dG9uJywKKyAgICAgICAgJ2RhdGEt YnRuLW5hbWUnOiAnY2FuY2VsJywKKyAgICAgIH1dLAorICAgICAgLy8gU2V0IG9wdGlvbnMgZm9y IGRpYWxvZworICAgICAgb3B0aW9uczogeworICAgICAgICB0aXRsZTogdGhpcy5kaWFsb2dUaXRs ZSwKKyAgICAgICAgLy9kaXNhYmxlIGJvdGggcGFkZGluZyBhbmQgb3ZlcmZsb3cgY29udHJvbC4K KyAgICAgICAgcGFkZGluZzogITEsCisgICAgICAgIG92ZXJmbG93OiAhMSwKKyAgICAgICAgbW9k ZWw6IDAsCisgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSwKKyAgICAgICAgbWF4aW1pemFibGU6IHRy dWUsCisgICAgICAgIHBpbm5hYmxlOiBmYWxzZSwKKyAgICAgICAgY2xvc2FibGVCeURpbW1lcjog ZmFsc2UsCisgICAgICAgIG1vZGFsOiBmYWxzZSwKKyAgICAgIH0sCisgICAgfTsKKyAgfQorCisg IHByZXBhcmUoKSB7CisgICAgdGhpcy5kaXNhYmxlQmFja3VwQnV0dG9uKCk7CisKKyAgICBjb25z dCAkY29udGFpbmVyID0gdGhpcy5mYWN0b3J5LmpxdWVyeSh0aGlzLmRpYWxvZ0NvbnRhaW5lclNl bGVjdG9yKTsKKyAgICBjb25zdCBzZWxlY3RlZFRyZWVOb2RlID0gdGhpcy5nZXRTZWxlY3RlZE5v ZGUoKTsKKyAgICBjb25zdCBzZWxlY3RlZFRyZWVOb2RlRGF0YSA9IERpYWxvZ0ZhY3RvcnkuZ2V0 U2VsZWN0ZWROb2RlKHNlbGVjdGVkVHJlZU5vZGUpOworICAgIGlmICghc2VsZWN0ZWRUcmVlTm9k ZURhdGEpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBub2RlID0gdGhpcy5m YWN0b3J5LnBnQnJvd3Nlci5Ob2Rlc1tzZWxlY3RlZFRyZWVOb2RlRGF0YS5fdHlwZV07CisgICAg aWYgKHRoaXMuZGlhbG9nVGl0bGUgPT09IG51bGwpIHsKKyAgICAgIGNvbnN0IHRpdGxlID0gYEJh Y2t1cCAoJHtub2RlLmxhYmVsfTogJHtzZWxlY3RlZFRyZWVOb2RlRGF0YS5sYWJlbH0pYDsKKyAg ICAgIHRoaXMubWFpbih0aXRsZSk7CisgICAgfQorCisgICAgY29uc3QgdHJlZUluZm8gPSBnZXRU cmVlTm9kZUhpZXJhcmNoeUZyb21FbGVtZW50KHRoaXMuZmFjdG9yeS5wZ0Jyb3dzZXIsIHNlbGVj dGVkVHJlZU5vZGUpOworICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuY3JlYXRlRGlhbG9nKG5vZGUs IHRyZWVJbmZvLCB0aGlzLnR5cGVPZkRpYWxvZywgJGNvbnRhaW5lcik7CisgICAgdGhpcy5hZGRB bGVydGlmeUNsYXNzVG9CYWNrdXBOb2RlQ2hpbGROb2RlcygpOworICAgIGRpYWxvZy5yZW5kZXIo KTsKKworICAgIHRoaXMuZWxlbWVudHMuY29udGVudC5hcHBlbmRDaGlsZCgkY29udGFpbmVyLmdl dCgwKSk7CisKKyAgICBEaWFsb2dGYWN0b3J5LmZvY3VzT25EaWFsb2coZGlhbG9nKTsKKyAgICB0 aGlzLnNldExpc3RlbmVyc0ZvckZpbGVuYW1lQ2hhbmdlcygpOworICB9CisKKyAgY2FsbGJhY2so ZXZlbnQpIHsKKyAgICBjb25zdCBzZWxlY3RlZFRyZWVOb2RlID0gdGhpcy5nZXRTZWxlY3RlZE5v ZGUoKTsKKyAgICBjb25zdCBzZWxlY3RlZFRyZWVOb2RlRGF0YSA9IERpYWxvZ0ZhY3RvcnkuZ2V0 U2VsZWN0ZWROb2RlKHNlbGVjdGVkVHJlZU5vZGUpOworICAgIGNvbnN0IG5vZGUgPSBzZWxlY3Rl ZFRyZWVOb2RlRGF0YSAmJiB0aGlzLmZhY3RvcnkucGdCcm93c2VyLk5vZGVzW3NlbGVjdGVkVHJl ZU5vZGVEYXRhLl90eXBlXTsKKworICAgIGlmIChEaWFsb2dGYWN0b3J5Lndhc0hlbHBCdXR0b25Q cmVzc2VkKGV2ZW50KSkgeworICAgICAgZXZlbnQuY2FuY2VsID0gdHJ1ZTsKKyAgICAgIHRoaXMu ZmFjdG9yeS5wZ0Jyb3dzZXIuc2hvd0hlbHAoCisgICAgICAgIGV2ZW50LmJ1dHRvbi5lbGVtZW50 Lm5hbWUsCisgICAgICAgIGV2ZW50LmJ1dHRvbi5lbGVtZW50LmdldEF0dHJpYnV0ZSgndXJsJyks CisgICAgICAgIG5vZGUsCisgICAgICAgIHNlbGVjdGVkVHJlZU5vZGUsCisgICAgICAgIGV2ZW50 LmJ1dHRvbi5lbGVtZW50LmdldEF0dHJpYnV0ZSgnbGFiZWwnKQorICAgICAgKTsKKyAgICAgIHJl dHVybjsKKyAgICB9CisKKyAgICBpZiAoRGlhbG9nRmFjdG9yeS53YXNCYWNrdXBCdXR0b25QcmVz c2VkKGV2ZW50KSkgeworCisgICAgICBpZiAoIXNlbGVjdGVkVHJlZU5vZGVEYXRhKQorICAgICAg ICByZXR1cm47CisKKyAgICAgIGNvbnN0IHNlcnZlcklkZW50aWZpZXIgPSB0aGlzLnJldHJpZXZl U2VydmVySWRlbnRpZmllcihub2RlLCBzZWxlY3RlZFRyZWVOb2RlKTsKKworICAgICAgY29uc3Qg ZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTsKKyAgICAgIGxldCB1cmxTaG9ydGN1dCA9ICdiYWNrdXAu Y3JlYXRlX3NlcnZlcl9qb2InOworICAgICAgaWYgKHRoaXMudHlwZU9mRGlhbG9nID09PSAnYmFj a3VwX29iamVjdHMnKSB7CisgICAgICAgIHVybFNob3J0Y3V0ID0gJ2JhY2t1cC5jcmVhdGVfb2Jq ZWN0X2pvYic7CisgICAgICB9CisgICAgICBjb25zdCBiYXNlVXJsID0gdXJsX2Zvcih1cmxTaG9y dGN1dCwgeworICAgICAgICAnc2lkJzogc2VydmVySWRlbnRpZmllciwKKyAgICAgIH0pOworCisg ICAgICB0aGlzLnNldEV4dHJhUGFyYW1ldGVycyhzZWxlY3RlZFRyZWVOb2RlKTsKKworICAgICAg bGV0IHNlcnZpY2UgPSBheGlvcy5jcmVhdGUoe30pOworICAgICAgc2VydmljZS5wb3N0KAorICAg ICAgICBiYXNlVXJsLAorICAgICAgICB0aGlzLnZpZXcubW9kZWwudG9KU09OKCkKKyAgICAgICku dGhlbihmdW5jdGlvbiAoKSB7CisgICAgICAgIGZhY3RvcnkuYWxlcnRpZnkuc3VjY2VzcyhnZXR0 ZXh0KCdCYWNrdXAgam9iIGNyZWF0ZWQuJyksIDUpOworICAgICAgICBmYWN0b3J5LnBnQnJvd3Nl ci5FdmVudHMudHJpZ2dlcigncGdhZG1pbi1iZ3Byb2Nlc3M6Y3JlYXRlZCcsIGZhY3RvcnkpOwor ICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7CisgICAgICAgIHRyeSB7CisgICAgICAg ICAgY29uc3QgZXJyID0gZXJyb3IucmVzcG9uc2UuZGF0YTsKKyAgICAgICAgICBmYWN0b3J5LmFs ZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgZ2V0dGV4dCgnQmFja3VwIGpvYiBmYWlsZWQuJyks CisgICAgICAgICAgICBlcnIuZXJyb3Jtc2cKKyAgICAgICAgICApOworICAgICAgICB9IGNhdGNo IChlKSB7CisgICAgICAgICAgY29uc29sZS53YXJuKGUuc3RhY2sgfHwgZSk7CisgICAgICAgIH0K KyAgICAgIH0pOworICAgIH0KKyAgfQorCisgIGFkZEFsZXJ0aWZ5Q2xhc3NUb0JhY2t1cE5vZGVD aGlsZE5vZGVzKCkgeworICAgIHRoaXMuZmFjdG9yeS5qcXVlcnkodGhpcy5lbGVtZW50cy5ib2R5 LmNoaWxkTm9kZXNbMF0pLmFkZENsYXNzKAorICAgICAgJ2FsZXJ0aWZ5X3Rvb2xzX2RpYWxvZ19w cm9wZXJ0aWVzIG9ial9wcm9wZXJ0aWVzJworICAgICk7CisgIH0KKworICBnZXRTZWxlY3RlZE5v ZGUoKSB7CisgICAgY29uc3QgdHJlZSA9IHRoaXMuZmFjdG9yeS5wZ0Jyb3dzZXIudHJlZU1lbnU7 CisgICAgY29uc3Qgc2VsZWN0ZWROb2RlID0gdHJlZS5zZWxlY3RlZCgpOworICAgIGlmIChzZWxl Y3RlZE5vZGUpIHsKKyAgICAgIHJldHVybiB0cmVlLmZpbmROb2RlQnlEb21FbGVtZW50KHNlbGVj dGVkTm9kZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgfQor ICB9CisKKyAgZGlzYWJsZUJhY2t1cEJ1dHRvbigpIHsKKyAgICB0aGlzLl9faW50ZXJuYWwuYnV0 dG9uc1syXS5lbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKKyAgfQorCisgIGVuYWJsZUJhY2t1cEJ1 dHRvbigpIHsKKyAgICB0aGlzLl9faW50ZXJuYWwuYnV0dG9uc1syXS5lbGVtZW50LmRpc2FibGVk ID0gZmFsc2U7CisgIH0KKworICBjcmVhdGVEaWFsb2cobm9kZSwgdHJlZUluZm8sIHR5cGVPZkRp YWxvZywgJGNvbnRhaW5lcikgeworICAgIGxldCBhdHRyaWJ1dGVzID0ge307CisgICAgaWYgKHR5 cGVPZkRpYWxvZyAhPT0gJ2JhY2t1cF9vYmplY3RzJykgeworICAgICAgYXR0cmlidXRlc1sndHlw ZSddID0gdHlwZU9mRGlhbG9nOworICAgIH0KKyAgICAvLyBJbnN0YW5jZSBvZiBiYWNrYm9uZSBt b2RlbAorICAgIGNvbnN0IG5ld01vZGVsID0gbmV3IHRoaXMuZmFjdG9yeS5iYWNrdXBNb2RlbChh dHRyaWJ1dGVzLCB7CisgICAgICBub2RlX2luZm86IHRyZWVJbmZvLAorICAgIH0pOworICAgIGNv bnN0IGZpZWxkcyA9IHRoaXMuZmFjdG9yeS5iYWNrZm9ybS5nZW5lcmF0ZVZpZXdTY2hlbWEoCisg ICAgICB0cmVlSW5mbywgbmV3TW9kZWwsICdjcmVhdGUnLCBub2RlLCB0cmVlSW5mby5zZXJ2ZXIs IHRydWUKKyAgICApOworCisgICAgcmV0dXJuIHRoaXMudmlldyA9IG5ldyB0aGlzLmZhY3Rvcnku YmFja2Zvcm0uRGlhbG9nKHsKKyAgICAgIGVsOiAkY29udGFpbmVyLAorICAgICAgbW9kZWw6IG5l d01vZGVsLAorICAgICAgc2NoZW1hOiBmaWVsZHMsCisgICAgfSk7CisgIH0KKworICByZXRyaWV2 ZVNlcnZlcklkZW50aWZpZXIobm9kZSwgc2VsZWN0ZWRUcmVlTm9kZSkgeworICAgIGNvbnN0IHRy ZWVJbmZvID0gZ2V0VHJlZU5vZGVIaWVyYXJjaHlGcm9tRWxlbWVudCgKKyAgICAgIHRoaXMuZmFj dG9yeS5wZ0Jyb3dzZXIsCisgICAgICBzZWxlY3RlZFRyZWVOb2RlCisgICAgKTsKKyAgICByZXR1 cm4gdHJlZUluZm8uc2VydmVyLl9pZDsKKyAgfQorCisgIHNldExpc3RlbmVyc0ZvckZpbGVuYW1l Q2hhbmdlcygpIHsKKyAgICBjb25zdCBzZWxmID0gdGhpczsKKworICAgIHRoaXMudmlldy5tb2Rl bC5vbignY2hhbmdlJywgZnVuY3Rpb24gKCkgeworICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRo aXMuZ2V0KCdmaWxlJykpICYmIHRoaXMuZ2V0KCdmaWxlJykgIT09ICcnKSB7CisgICAgICAgIHRo aXMuZXJyb3JNb2RlbC5jbGVhcigpOworICAgICAgICBzZWxmLmVuYWJsZUJhY2t1cEJ1dHRvbigp OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc2VsZi5kaXNhYmxlQmFja3VwQnV0dG9uKCk7Cisg ICAgICAgIHRoaXMuZXJyb3JNb2RlbC5zZXQoJ2ZpbGUnLCBnZXR0ZXh0KCdQbGVhc2UgcHJvdmlk ZSBhIGZpbGVuYW1lJykpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgc2V0RXh0cmFQYXJh bWV0ZXJzKHNlbGVjdGVkVHJlZU5vZGUpIHsKKyAgICBpZiAodGhpcy50eXBlT2ZEaWFsb2cgPT09 ICdiYWNrdXBfb2JqZWN0cycpIHsKKyAgICAgIGNvbnN0IHRyZWVJbmZvID0gZ2V0VHJlZU5vZGVI aWVyYXJjaHlGcm9tRWxlbWVudCgKKyAgICAgICAgdGhpcy5mYWN0b3J5LnBnQnJvd3NlciwKKyAg ICAgICAgc2VsZWN0ZWRUcmVlTm9kZQorICAgICAgKTsKKworICAgICAgdGhpcy52aWV3Lm1vZGVs LnNldCgnZGF0YWJhc2UnLCB0cmVlSW5mby5kYXRhYmFzZS5fbGFiZWwpOworCisgICAgICBjb25z dCBub2RlRGF0YSA9IHNlbGVjdGVkVHJlZU5vZGUuZ2V0RGF0YSgpOworICAgICAgaWYgKG5vZGVE YXRhLl90eXBlID09PSAnc2NoZW1hJykgeworICAgICAgICB0aGlzLnZpZXcubW9kZWwuc2V0KCdz Y2hlbWFzJywgW25vZGVEYXRhLl9sYWJlbF0pOworICAgICAgfQorCisgICAgICBpZiAobm9kZURh dGEuX3R5cGUgPT09ICd0YWJsZScpIHsKKyAgICAgICAgdGhpcy52aWV3Lm1vZGVsLnNldCgndGFi bGVzJywgWworICAgICAgICAgIFt0cmVlSW5mby5zY2hlbWEuX2xhYmVsLCBub2RlRGF0YS5fbGFi ZWxdLAorICAgICAgICBdKTsKKyAgICAgIH0KKworICAgICAgaWYgKF8uaXNFbXB0eSh0aGlzLnZp ZXcubW9kZWwuZ2V0KCdyYXRpbycpKSkgeworICAgICAgICB0aGlzLnZpZXcubW9kZWwudW5zZXQo J3JhdGlvJyk7CisgICAgICB9CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1p bi9zdGF0aWMvanMvYmFja3VwL21lbnVfdXRpbHMuanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMv YmFja3VwL21lbnVfdXRpbHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAu LmY2N2E0MzZhCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2JhY2t1 cC9tZW51X3V0aWxzLmpzCkBAIC0wLDAgKzEsNjAgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBwZ0FkbWluIDQg LSBQb3N0Z3JlU1FMIFRvb2xzCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwgVGhl IHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1 bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworZXhwb3J0IGNvbnN0IGJh Y2t1cFN1cHBvcnRlZE5vZGVzID0gWworICAnZGF0YWJhc2UnLCAnc2NoZW1hJywgJ3RhYmxlJywg J3BhcnRpdGlvbicsCitdOworCitmdW5jdGlvbiBpc05vZGVUeXBlU3VwcG9ydGVkKG5vZGVEYXRh VHlwZSwgcGFyZW50Tm9kZVR5cGUpIHsKKyAgcmV0dXJuIF8uaW5kZXhPZihiYWNrdXBTdXBwb3J0 ZWROb2Rlcywgbm9kZURhdGFUeXBlKSAhPT0gLTEKKyAgICAmJiBwYXJlbnROb2RlVHlwZSAhPT0g J2NhdGFsb2cnOworfQorCitmdW5jdGlvbiBpc1Byb3ZpZGVkRGF0YVZhbGlkKHRyZWVOb2RlRGF0 YSkgeworICByZXR1cm4gIV8uaXNVbmRlZmluZWQodHJlZU5vZGVEYXRhKSAmJiAhXy5pc051bGwo dHJlZU5vZGVEYXRhKTsKK30KKworZnVuY3Rpb24gZG9lc05vZGVIYXZlTWVudSh0cmVlTm9kZURh dGEpIHsKKyAgcmV0dXJuICh0cmVlTm9kZURhdGEuX3R5cGUgPT09ICdkYXRhYmFzZScgJiYgdHJl ZU5vZGVEYXRhLmFsbG93Q29ubikKKyAgICB8fCB0cmVlTm9kZURhdGEuX3R5cGUgIT09ICdkYXRh YmFzZSc7Cit9CisKK2Z1bmN0aW9uIHJldHJpZXZlUGFyZW50Tm9kZVR5cGUodHJlZU5vZGUpIHsK KyAgaWYgKCF0cmVlTm9kZS5oYXNQYXJlbnQoKSkgeworICAgIHJldHVybiBudWxsOworICB9Cisg IGlmKHRyZWVOb2RlLnBhcmVudCgpLmdldERhdGEoKSA9PT0gbnVsbCkgeworICAgIHJldHVybiBu dWxsOworICB9CisgIHJldHVybiB0cmVlTm9kZS5wYXJlbnQoKS5nZXREYXRhKCkuX3R5cGU7Cit9 CisKK2V4cG9ydCBmdW5jdGlvbiBtZW51RW5hYmxlZCh0cmVlTm9kZURhdGEsIGRvbVRyZWVOb2Rl KSB7CisgIGxldCB0cmVlTm9kZSA9IHRoaXMudHJlZU1lbnUuZmluZE5vZGVCeURvbUVsZW1lbnQo ZG9tVHJlZU5vZGUpOworICBpZighdHJlZU5vZGUpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0K KyAgbGV0IHBhcmVudE5vZGVUeXBlID0gcmV0cmlldmVQYXJlbnROb2RlVHlwZSh0cmVlTm9kZSk7 CisKKyAgaWYgKGlzUHJvdmlkZWREYXRhVmFsaWQodHJlZU5vZGVEYXRhKSAmJiAhXy5pc051bGwo cGFyZW50Tm9kZVR5cGUpKSB7CisgICAgcmV0dXJuIGlzTm9kZVR5cGVTdXBwb3J0ZWQodHJlZU5v ZGVEYXRhLl90eXBlLCBwYXJlbnROb2RlVHlwZSkKKyAgICAgICYmIGRvZXNOb2RlSGF2ZU1lbnUo dHJlZU5vZGVEYXRhKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KK30KKwor ZnVuY3Rpb24gaXNOb2RlQVNlcnZlckFuZENvbm5lY3RlZCh0cmVlTm9kZURhdGEpIHsKKyAgcmV0 dXJuICgoJ3NlcnZlcicgPT09IHRyZWVOb2RlRGF0YS5fdHlwZSkgJiYgdHJlZU5vZGVEYXRhLmNv bm5lY3RlZCk7Cit9CisKK2V4cG9ydCBmdW5jdGlvbiBtZW51RW5hYmxlZFNlcnZlcih0cmVlTm9k ZURhdGEpIHsKKyAgcmV0dXJuIGlzUHJvdmlkZWREYXRhVmFsaWQodHJlZU5vZGVEYXRhKQorICAg ICYmIGlzTm9kZUFTZXJ2ZXJBbmRDb25uZWN0ZWQodHJlZU5vZGVEYXRhKTsKK30KZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9kYXRhZ3JpZC9nZXRfcGFuZWxfdGl0bGUuanMgYi93 ZWIvcGdhZG1pbi9zdGF0aWMvanMvZGF0YWdyaWQvZ2V0X3BhbmVsX3RpdGxlLmpzCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5mNWE1NjY0ZAotLS0gL2Rldi9udWxsCisrKyBi L3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9kYXRhZ3JpZC9nZXRfcGFuZWxfdGl0bGUuanMKQEAgLTAs MCArMSwzMyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8v CisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBU ZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExp Y2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLworCitpbXBvcnQge2dldFRyZWVOb2RlSGllcmFyY2h5RnJvbUlkZW50 aWZpZXJ9IGZyb20gJy4uL3RyZWUvcGdhZG1pbl90cmVlX25vZGUnOworCitmdW5jdGlvbiBnZXRE YXRhYmFzZUxhYmVsKHBhcmVudERhdGEpIHsKKyAgcmV0dXJuIHBhcmVudERhdGEuZGF0YWJhc2Ug PyBwYXJlbnREYXRhLmRhdGFiYXNlLmxhYmVsCisgICAgOiBwYXJlbnREYXRhLnNlcnZlci5kYjsK K30KKworZnVuY3Rpb24gaXNTZXJ2ZXJJbmZvcm1hdGlvbkF2YWlsYWJsZShwYXJlbnREYXRhKSB7 CisgIHJldHVybiBwYXJlbnREYXRhLnNlcnZlciA9PT0gdW5kZWZpbmVkOworfQorCitleHBvcnQg ZnVuY3Rpb24gZ2V0UGFuZWxUaXRsZShwZ0Jyb3dzZXIpIHsKKyAgY29uc3Qgc2VsZWN0ZWRfaXRl bSA9IHBnQnJvd3Nlci50cmVlTWVudS5zZWxlY3RlZCgpOworCisgIGNvbnN0IHBhcmVudERhdGEg PSBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21JZGVudGlmaWVyCisgICAgLmNhbGwocGdCcm93c2Vy LCBzZWxlY3RlZF9pdGVtKTsKKyAgaWYgKGlzU2VydmVySW5mb3JtYXRpb25BdmFpbGFibGUocGFy ZW50RGF0YSkpIHsKKyAgICByZXR1cm47CisgIH0KKworICBjb25zdCBkYl9sYWJlbCA9IGdldERh dGFiYXNlTGFiZWwocGFyZW50RGF0YSk7CisKKyAgcmV0dXJuIGAke2RiX2xhYmVsfSBvbiAke3Bh cmVudERhdGEuc2VydmVyLnVzZXIubmFtZX1AJHtwYXJlbnREYXRhLnNlcnZlci5sYWJlbH1gOwor fQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2RhdGFncmlkL3Nob3dfZGF0YS5q cyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9kYXRhZ3JpZC9zaG93X2RhdGEuanMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmE0MTRmZDc3Ci0tLSAvZGV2L251bGwKKysrIGIv d2ViL3BnYWRtaW4vc3RhdGljL2pzL2RhdGFncmlkL3Nob3dfZGF0YS5qcwpAQCAtMCwwICsxLDky IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vCisvLworLy8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENv cHlyaWdodCAoQykgMjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8v IFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQor Ly8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vCitpbXBvcnQgZ2V0dGV4dCBmcm9tICcuLi9nZXR0ZXh0JzsKK2ltcG9ydCB1cmxf Zm9yIGZyb20gJy4uL3VybF9mb3InOworaW1wb3J0IHtnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21J ZGVudGlmaWVyfSBmcm9tICcuLi8uLi8uLi9zdGF0aWMvanMvdHJlZS9wZ2FkbWluX3RyZWVfbm9k ZSc7CisKK2V4cG9ydCBmdW5jdGlvbiBzaG93RGF0YUdyaWQoCisgIGRhdGFncmlkLAorICBwZ0Jy b3dzZXIsCisgIGFsZXJ0aWZ5LAorICBjb25uZWN0aW9uRGF0YSwKKyAgYWNpVHJlZUlkZW50aWZp ZXIKKykgeworICBjb25zdCBub2RlID0gcGdCcm93c2VyLnRyZWVNZW51LmZpbmROb2RlQnlEb21F bGVtZW50KGFjaVRyZWVJZGVudGlmaWVyKTsKKyAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCB8fCAh bm9kZS5nZXREYXRhKCkpIHsKKyAgICBhbGVydGlmeS5hbGVydCgKKyAgICAgIGdldHRleHQoJ0Rh dGEgR3JpZCBFcnJvcicpLAorICAgICAgZ2V0dGV4dCgnTm8gb2JqZWN0IHNlbGVjdGVkLicpCisg ICAgKTsKKyAgICByZXR1cm47CisgIH0KKworICBjb25zdCBwYXJlbnREYXRhID0gZ2V0VHJlZU5v ZGVIaWVyYXJjaHlGcm9tSWRlbnRpZmllci5jYWxsKAorICAgIHBnQnJvd3NlciwKKyAgICBhY2lU cmVlSWRlbnRpZmllcgorICApOworCisgIGlmIChoYXNTZXJ2ZXJPckRhdGFiYXNlQ29uZmlndXJh dGlvbihwYXJlbnREYXRhKQorICAgIHx8ICFoYXNTY2hlbWFPckNhdGFsb2dPclZpZXdJbmZvcm1h dGlvbihwYXJlbnREYXRhKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIGxldCBuYW1lc3BhY2VO YW1lID0gcmV0cmlldmVOYW1lU3BhY2VOYW1lKHBhcmVudERhdGEpOworICBjb25zdCBiYXNlVXJs ID0gZ2VuZXJhdGVVcmwoY29ubmVjdGlvbkRhdGEsIG5vZGUuZ2V0RGF0YSgpLCBwYXJlbnREYXRh KTsKKyAgY29uc3QgZ3JpZF90aXRsZSA9IGdlbmVyYXRlRGF0YWdyaWRUaXRsZShwYXJlbnREYXRh LCBuYW1lc3BhY2VOYW1lLCBub2RlLmdldERhdGEoKSk7CisKKyAgZGF0YWdyaWQuY3JlYXRlX3Ry YW5zYWN0aW9uKAorICAgIGJhc2VVcmwsCisgICAgbnVsbCwKKyAgICAnZmFsc2UnLAorICAgIHBh cmVudERhdGEuc2VydmVyLnNlcnZlcl90eXBlLAorICAgICcnLAorICAgIGdyaWRfdGl0bGUsCisg ICAgJycKKyAgKTsKK30KKworCitmdW5jdGlvbiByZXRyaWV2ZU5hbWVTcGFjZU5hbWUocGFyZW50 RGF0YSkgeworICBpZiAocGFyZW50RGF0YS5zY2hlbWEgIT09IHVuZGVmaW5lZCkgeworICAgIHJl dHVybiBwYXJlbnREYXRhLnNjaGVtYS5sYWJlbDsKKyAgfQorICBlbHNlIGlmIChwYXJlbnREYXRh LnZpZXcgIT09IHVuZGVmaW5lZCkgeworICAgIHJldHVybiBwYXJlbnREYXRhLnZpZXcubGFiZWw7 CisgIH0KKyAgZWxzZSBpZiAocGFyZW50RGF0YS5jYXRhbG9nICE9PSB1bmRlZmluZWQpIHsKKyAg ICByZXR1cm4gcGFyZW50RGF0YS5jYXRhbG9nLmxhYmVsOworICB9CisgIHJldHVybiAnJzsKK30K KworZnVuY3Rpb24gZ2VuZXJhdGVVcmwoY29ubmVjdGlvbkRhdGEsIG5vZGVEYXRhLCBwYXJlbnRE YXRhKSB7CisgIGNvbnN0IHVybF9wYXJhbXMgPSB7CisgICAgJ2NtZF90eXBlJzogY29ubmVjdGlv bkRhdGEubW51aWQsCisgICAgJ29ial90eXBlJzogbm9kZURhdGEuX3R5cGUsCisgICAgJ3NnaWQn OiBwYXJlbnREYXRhLnNlcnZlcl9ncm91cC5faWQsCisgICAgJ3NpZCc6IHBhcmVudERhdGEuc2Vy dmVyLl9pZCwKKyAgICAnZGlkJzogcGFyZW50RGF0YS5kYXRhYmFzZS5faWQsCisgICAgJ29ial9p ZCc6IG5vZGVEYXRhLl9pZCwKKyAgfTsKKworICByZXR1cm4gdXJsX2ZvcignZGF0YWdyaWQuaW5p dGlhbGl6ZV9kYXRhZ3JpZCcsIHVybF9wYXJhbXMpOworfQorCitmdW5jdGlvbiBoYXNTZXJ2ZXJP ckRhdGFiYXNlQ29uZmlndXJhdGlvbihwYXJlbnREYXRhKSB7CisgIHJldHVybiBwYXJlbnREYXRh LnNlcnZlciA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudERhdGEuZGF0YWJhc2UgPT09IHVuZGVmaW5l ZDsKK30KKworZnVuY3Rpb24gaGFzU2NoZW1hT3JDYXRhbG9nT3JWaWV3SW5mb3JtYXRpb24ocGFy ZW50RGF0YSkgeworICByZXR1cm4gcGFyZW50RGF0YS5zY2hlbWEgIT09IHVuZGVmaW5lZCB8fCBw YXJlbnREYXRhLnZpZXcgIT09IHVuZGVmaW5lZCB8fAorICAgIHBhcmVudERhdGEuY2F0YWxvZyAh PT0gdW5kZWZpbmVkOworfQorCitmdW5jdGlvbiBnZW5lcmF0ZURhdGFncmlkVGl0bGUocGFyZW50 RGF0YSwgbmFtZXNwYWNlTmFtZSwgbm9kZURhdGEpIHsKKyAgcmV0dXJuIGAke3BhcmVudERhdGEu c2VydmVyLmxhYmVsfSAtICR7cGFyZW50RGF0YS5kYXRhYmFzZS5sYWJlbH0gLSAke25hbWVzcGFj ZU5hbWV9LiR7bm9kZURhdGEubGFiZWx9YDsKK30KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0 YXRpYy9qcy9kYXRhZ3JpZC9zaG93X3F1ZXJ5X3Rvb2wuanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMv anMvZGF0YWdyaWQvc2hvd19xdWVyeV90b29sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwLi4wNDM2ZTBmZAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRp Yy9qcy9kYXRhZ3JpZC9zaG93X3F1ZXJ5X3Rvb2wuanMKQEAgLTAsMCArMSw2MyBAQAorLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor Ly8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMp IDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3 YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor CitpbXBvcnQgZ2V0dGV4dCBmcm9tICcuLi9nZXR0ZXh0JzsKK2ltcG9ydCB1cmxfZm9yIGZyb20g Jy4uL3VybF9mb3InOworaW1wb3J0IHtnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21JZGVudGlmaWVy fSBmcm9tICcuLi8uLi8uLi9zdGF0aWMvanMvdHJlZS9wZ2FkbWluX3RyZWVfbm9kZSc7CisKK2Z1 bmN0aW9uIGhhc0RhdGFiYXNlSW5mb3JtYXRpb24ocGFyZW50RGF0YSkgeworICByZXR1cm4gcGFy ZW50RGF0YS5kYXRhYmFzZTsKK30KKworZnVuY3Rpb24gZ2VuZXJhdGVVcmwocGFyZW50RGF0YSkg eworICBsZXQgdXJsX2VuZHBvaW50ID0gJ2RhdGFncmlkLmluaXRpYWxpemVfcXVlcnlfdG9vbCc7 CisgIGxldCB1cmxfcGFyYW1zID0geworICAgICdzZ2lkJzogcGFyZW50RGF0YS5zZXJ2ZXJfZ3Jv dXAuX2lkLAorICAgICdzaWQnOiBwYXJlbnREYXRhLnNlcnZlci5faWQsCisgIH07CisKKyAgaWYg KGhhc0RhdGFiYXNlSW5mb3JtYXRpb24ocGFyZW50RGF0YSkpIHsKKyAgICB1cmxfcGFyYW1zWydk aWQnXSA9IHBhcmVudERhdGEuZGF0YWJhc2UuX2lkOworICAgIHVybF9lbmRwb2ludCA9ICdkYXRh Z3JpZC5pbml0aWFsaXplX3F1ZXJ5X3Rvb2xfd2l0aF9kaWQnOworICB9CisKKyAgcmV0dXJuIHVy bF9mb3IodXJsX2VuZHBvaW50LCB1cmxfcGFyYW1zKTsKK30KKworZnVuY3Rpb24gaGFzU2VydmVy SW5mb3JtYXRpb25zKHBhcmVudERhdGEpIHsKKyAgcmV0dXJuIHBhcmVudERhdGEuc2VydmVyID09 PSB1bmRlZmluZWQ7Cit9CisKK2V4cG9ydCBmdW5jdGlvbiBzaG93UXVlcnlUb29sKGRhdGFncmlk LCBwZ0Jyb3dzZXIsIGFsZXJ0aWZ5LCB1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhY2lUcmVlSWRlbnRpZmllciwgcGFuZWxUaXRsZSkgeworICBjb25zdCBzVVJMID0gdXJsIHx8 ICcnOworICBjb25zdCBxdWVyeVRvb2xUaXRsZSA9IHBhbmVsVGl0bGUgfHwgJyc7CisKKyAgY29u c3QgY3VycmVudE5vZGUgPSBwZ0Jyb3dzZXIudHJlZU1lbnUuZmluZE5vZGVCeURvbUVsZW1lbnQo YWNpVHJlZUlkZW50aWZpZXIpOworICBpZiAoY3VycmVudE5vZGUgPT09IHVuZGVmaW5lZCkgewor ICAgIGFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgZ2V0dGV4dCgnUXVlcnkgVG9vbCBFcnJvcicpLAor ICAgICAgZ2V0dGV4dCgnTm8gb2JqZWN0IHNlbGVjdGVkLicpCisgICAgKTsKKyAgICByZXR1cm47 CisgIH0KKworICBjb25zdCBwYXJlbnREYXRhID0gZ2V0VHJlZU5vZGVIaWVyYXJjaHlGcm9tSWRl bnRpZmllci5jYWxsKAorICAgIHBnQnJvd3NlciwgYWNpVHJlZUlkZW50aWZpZXIpOworCisgIGlm IChoYXNTZXJ2ZXJJbmZvcm1hdGlvbnMocGFyZW50RGF0YSkpIHsKKyAgICByZXR1cm47CisgIH0K KworICBjb25zdCBiYXNlVXJsID0gZ2VuZXJhdGVVcmwocGFyZW50RGF0YSk7CisKKyAgZGF0YWdy aWQuY3JlYXRlX3RyYW5zYWN0aW9uKAorICAgIGJhc2VVcmwsIG51bGwsICd0cnVlJywKKyAgICBw YXJlbnREYXRhLnNlcnZlci5zZXJ2ZXJfdHlwZSwgc1VSTCwgcXVlcnlUb29sVGl0bGUsICcnLCBm YWxzZSk7Cit9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvdHJlZS9wZ2FkbWlu X3RyZWVfbm9kZS5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy90cmVlL3BnYWRtaW5fdHJlZV9u b2RlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5iY2NiZTU4NwotLS0g L2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy90cmVlL3BnYWRtaW5fdHJlZV9u b2RlLmpzCkBAIC0wLDAgKzEsNDMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1p biA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgs IFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFz ZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisK K2V4cG9ydCBmdW5jdGlvbiBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21FbGVtZW50KHBnQnJvd3Nl ciwgdHJlZU5vZGUpIHsKKyAgcmV0dXJuIGdldFRyZWVOb2RlSGllcmFyY2h5LmNhbGwocGdCcm93 c2VyLCB0cmVlTm9kZSk7Cit9CisKK2V4cG9ydCBmdW5jdGlvbiBnZXRUcmVlTm9kZUhpZXJhcmNo eUZyb21JZGVudGlmaWVyKGFjaVRyZWVOb2RlSWRlbnRpZmllcikgeworICBsZXQgaWRlbnRpZmll ciA9IHRoaXMudHJlZU1lbnUudHJhbnNsYXRlVHJlZU5vZGVJZEZyb21BQ0lUcmVlKGFjaVRyZWVO b2RlSWRlbnRpZmllcik7CisgIGxldCBjdXJyZW50Tm9kZSA9IHRoaXMudHJlZU1lbnUuZmluZE5v ZGUoaWRlbnRpZmllcik7CisgIHJldHVybiBnZXRUcmVlTm9kZUhpZXJhcmNoeS5jYWxsKHRoaXMs IGN1cnJlbnROb2RlKTsKK30KKworZXhwb3J0IGZ1bmN0aW9uIGdldFRyZWVOb2RlSGllcmFyY2h5 KGN1cnJlbnROb2RlKSB7CisgIGxldCBpZHggPSAwOworICBsZXQgcmVzdWx0ID0ge307CisKKyAg ZG8geworICAgIGNvbnN0IGN1cnJlbnROb2RlRGF0YSA9IGN1cnJlbnROb2RlLmdldERhdGEoKTsK KyAgICBpZiAoY3VycmVudE5vZGVEYXRhLl90eXBlIGluIHRoaXMuTm9kZXMgJiYgdGhpcy5Ob2Rl c1tjdXJyZW50Tm9kZURhdGEuX3R5cGVdLmhhc0lkKSB7CisgICAgICBjb25zdCBub2RlVHlwZSA9 IG1hcFR5cGUoY3VycmVudE5vZGVEYXRhLl90eXBlKTsKKyAgICAgIGlmIChyZXN1bHRbbm9kZVR5 cGVdID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgcmVzdWx0W25vZGVUeXBlXSA9IF8uZXh0ZW5k KHt9LCBjdXJyZW50Tm9kZURhdGEsIHsKKyAgICAgICAgICAncHJpb3JpdHknOiBpZHgsCisgICAg ICAgIH0pOworICAgICAgICBpZHggLT0gMTsKKyAgICAgIH0KKyAgICB9CisgICAgY3VycmVudE5v ZGUgPSBjdXJyZW50Tm9kZS5oYXNQYXJlbnQoKSA/IGN1cnJlbnROb2RlLnBhcmVudCgpIDogbnVs bDsKKyAgfSB3aGlsZSAoY3VycmVudE5vZGUpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK2Z1 bmN0aW9uIG1hcFR5cGUodHlwZSkgeworICByZXR1cm4gdHlwZSA9PT0gJ3BhcnRpdGlvbicgPyAn dGFibGUnIDogdHlwZTsKK30KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2JhY2t1cC9z dGF0aWMvanMvYmFja3VwLmpzIGIvd2ViL3BnYWRtaW4vdG9vbHMvYmFja3VwL3N0YXRpYy9qcy9i YWNrdXAuanMKaW5kZXggZGRiZmFlZTQuLmZmYmFlMTI3IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1p bi90b29scy9iYWNrdXAvc3RhdGljL2pzL2JhY2t1cC5qcworKysgYi93ZWIvcGdhZG1pbi90b29s cy9iYWNrdXAvc3RhdGljL2pzL2JhY2t1cC5qcwpAQCAtMyw5ICszLDEwIEBAIGRlZmluZShbCiAg ICdzb3VyY2VzL2dldHRleHQnLCAnc291cmNlcy91cmxfZm9yJywgJ2pxdWVyeScsICd1bmRlcnNj b3JlJywKICAgJ3VuZGVyc2NvcmUuc3RyaW5nJywgJ3BnYWRtaW4uYWxlcnRpZnlqcycsICdiYWNr Ym9uZScsICdwZ2FkbWluLmJhY2tncmlkJywKICAgJ3BnYWRtaW4uYmFja2Zvcm0nLCAncGdhZG1p bi5icm93c2VyJywgJ3NvdXJjZXMvdXRpbHMnLAorICAnc291cmNlcy9iYWNrdXAvbWVudV91dGls cycsICdzb3VyY2VzL2JhY2t1cC9iYWNrdXBfZGlhbG9nJywKIF0sIGZ1bmN0aW9uKAogICBnZXR0 ZXh0LCB1cmxfZm9yLCAkLCBfLCBTLCBhbGVydGlmeSwgQmFja2JvbmUsIEJhY2tncmlkLCBCYWNr Zm9ybSwgcGdCcm93c2VyLAotY29tbW9uVXRpbHMKK2NvbW1vblV0aWxzLCBtZW51VXRpbHMsIGds b2JhbEJhY2t1cERpYWxvZwogKSB7CgogICAvLyBpZiBtb2R1bGUgaXMgYWxyZWFkeSBpbml0aWFs aXplZCwgcmVmZXIgdG8gdGhhdC4KQEAgLTM5NCw0OCArMzk1LDYgQEAgY29tbW9uVXRpbHMKCiAg ICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTsKCi0gICAgICAvLyBEZWZpbmUgbGlzdCBvZiBu b2RlcyBvbiB3aGljaCBiYWNrdXAgY29udGV4dCBtZW51IG9wdGlvbiBhcHBlYXJzCi0gICAgICB2 YXIgYmFja3VwX3N1cHBvcnRlZF9ub2RlcyA9IFsKLSAgICAgICAgJ2RhdGFiYXNlJywgJ3NjaGVt YScsICd0YWJsZScsICdwYXJ0aXRpb24nLAotICAgICAgXTsKLQotICAgICAgLyoqCi0gICAgICAg IEVuYWJsZS9kaXNhYmxlIGJhY2t1cCBtZW51IGluIHRvb2xzIGJhc2VkCi0gICAgICAgIG9uIG5v ZGUgc2VsZWN0ZWQKLSAgICAgICAgaWYgc2VsZWN0ZWQgbm9kZSBpcyBwcmVzZW50IGluIHN1cHBv cnRlZF9ub2RlcywKLSAgICAgICAgbWVudSB3aWxsIGJlIGVuYWJsZWQgb3RoZXJ3aXNlIGRpc2Fi bGVkLgotICAgICAgICBBbHNvLCBoaWRlIGl0IGZvciBzeXN0ZW0gdmlldyBpbiBjYXRhbG9ncwot ICAgICAgKi8KLSAgICAgIHZhciBtZW51X2VuYWJsZWQgPSBmdW5jdGlvbihpdGVtRGF0YSwgaXRl bSkgewotICAgICAgICB2YXIgdCA9IHBnQnJvd3Nlci50cmVlLAotICAgICAgICAgIGkgPSBpdGVt LAotICAgICAgICAgIGQgPSBpdGVtRGF0YSwKLSAgICAgICAgICBwYXJlbnRfaXRlbSA9IHQuaGFz UGFyZW50KGkpID8gdC5wYXJlbnQoaSkgOiBudWxsLAotICAgICAgICAgIHBhcmVudF9kYXRhID0g cGFyZW50X2l0ZW0gPyB0Lml0ZW1EYXRhKHBhcmVudF9pdGVtKSA6IG51bGw7Ci0KLSAgICAgICAg aWYgKCFfLmlzVW5kZWZpbmVkKGQpICYmICFfLmlzTnVsbChkKSAmJiAhXy5pc051bGwocGFyZW50 X2RhdGEpKSB7Ci0gICAgICAgICAgaWYgKF8uaW5kZXhPZihiYWNrdXBfc3VwcG9ydGVkX25vZGVz LCBkLl90eXBlKSAhPT0gLTEgJiYKLSAgICAgICAgICAgIHBhcmVudF9kYXRhLl90eXBlICE9ICdj YXRhbG9nJykgewotICAgICAgICAgICAgaWYgKGQuX3R5cGUgPT0gJ2RhdGFiYXNlJyAmJiBkLmFs bG93Q29ubikKLSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlm IChkLl90eXBlICE9ICdkYXRhYmFzZScpCi0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgfSBl bHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg IHJldHVybiBmYWxzZTsKLSAgICAgIH07Ci0KLSAgICAgIHZhciBtZW51X2VuYWJsZWRfc2VydmVy ID0gZnVuY3Rpb24oaXRlbURhdGEpIHsKLSAgICAgICAgLy8gSWYgc2VydmVyIG5vZGUgc2VsZWN0 ZWQgJiYgY29ubmVjdGVkCi0gICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChpdGVtRGF0YSkgJiYg IV8uaXNOdWxsKGl0ZW1EYXRhKSkKLSAgICAgICAgICByZXR1cm4gKCgnc2VydmVyJyA9PT0gaXRl bURhdGEuX3R5cGUpICYmIGl0ZW1EYXRhLmNvbm5lY3RlZCk7Ci0gICAgICAgIGVsc2UKLSAgICAg ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9OwotCiAgICAgICAvLyBEZWZpbmUgdGhlIG5vZGVz IG9uIHdoaWNoIHRoZSBtZW51cyB0byBiZSBhcHBlYXIKICAgICAgIHZhciBtZW51cyA9IFt7CiAg ICAgICAgIG5hbWU6ICdiYWNrdXBfZ2xvYmFsJywKQEAgLTQ0NSw3ICs0MDQsNyBAQCBjb21tb25V dGlscwogICAgICAgICBwcmlvcml0eTogMTIsCiAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdCYWNr dXAgR2xvYmFscy4uLicpLAogICAgICAgICBpY29uOiAnZmEgZmEtZmxvcHB5LW8nLAotICAgICAg ICBlbmFibGU6IG1lbnVfZW5hYmxlZF9zZXJ2ZXIsCisgICAgICAgIGVuYWJsZTogbWVudVV0aWxz Lm1lbnVFbmFibGVkU2VydmVyLAogICAgICAgfSwgewogICAgICAgICBuYW1lOiAnYmFja3VwX3Nl cnZlcicsCiAgICAgICAgIG1vZHVsZTogdGhpcywKQEAgLTQ1NCw3ICs0MTMsNyBAQCBjb21tb25V dGlscwogICAgICAgICBwcmlvcml0eTogMTIsCiAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdCYWNr dXAgU2VydmVyLi4uJyksCiAgICAgICAgIGljb246ICdmYSBmYS1mbG9wcHktbycsCi0gICAgICAg IGVuYWJsZTogbWVudV9lbmFibGVkX3NlcnZlciwKKyAgICAgICAgZW5hYmxlOiBtZW51VXRpbHMu bWVudUVuYWJsZWRTZXJ2ZXIsCiAgICAgICB9LCB7CiAgICAgICAgIG5hbWU6ICdiYWNrdXBfZ2xv YmFsX2N0eCcsCiAgICAgICAgIG1vZHVsZTogdGhpcywKQEAgLTQ2NCw3ICs0MjMsNyBAQCBjb21t b25VdGlscwogICAgICAgICBwcmlvcml0eTogMTIsCiAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdC YWNrdXAgR2xvYmFscy4uLicpLAogICAgICAgICBpY29uOiAnZmEgZmEtZmxvcHB5LW8nLAotICAg ICAgICBlbmFibGU6IG1lbnVfZW5hYmxlZF9zZXJ2ZXIsCisgICAgICAgIGVuYWJsZTogbWVudVV0 aWxzLm1lbnVFbmFibGVkU2VydmVyLAogICAgICAgfSwgewogICAgICAgICBuYW1lOiAnYmFja3Vw X3NlcnZlcl9jdHgnLAogICAgICAgICBtb2R1bGU6IHRoaXMsCkBAIC00NzQsNyArNDMzLDcgQEAg Y29tbW9uVXRpbHMKICAgICAgICAgcHJpb3JpdHk6IDEyLAogICAgICAgICBsYWJlbDogZ2V0dGV4 dCgnQmFja3VwIFNlcnZlci4uLicpLAogICAgICAgICBpY29uOiAnZmEgZmEtZmxvcHB5LW8nLAot ICAgICAgICBlbmFibGU6IG1lbnVfZW5hYmxlZF9zZXJ2ZXIsCisgICAgICAgIGVuYWJsZTogbWVu dVV0aWxzLm1lbnVFbmFibGVkU2VydmVyLAogICAgICAgfSwgewogICAgICAgICBuYW1lOiAnYmFj a3VwX29iamVjdCcsCiAgICAgICAgIG1vZHVsZTogdGhpcywKQEAgLTQ4MywyMCArNDQyLDIwIEBA IGNvbW1vblV0aWxzCiAgICAgICAgIHByaW9yaXR5OiAxMSwKICAgICAgICAgbGFiZWw6IGdldHRl eHQoJ0JhY2t1cC4uLicpLAogICAgICAgICBpY29uOiAnZmEgZmEtZmxvcHB5LW8nLAotICAgICAg ICBlbmFibGU6IG1lbnVfZW5hYmxlZCwKKyAgICAgICAgZW5hYmxlOiBtZW51VXRpbHMubWVudUVu YWJsZWQuYmluZChwZ0Jyb3dzZXIpLAogICAgICAgfV07CgotICAgICAgZm9yICh2YXIgaWR4ID0g MDsgaWR4IDwgYmFja3VwX3N1cHBvcnRlZF9ub2Rlcy5sZW5ndGg7IGlkeCsrKSB7CisgICAgICBm b3IgKHZhciBpZHggPSAwOyBpZHggPCBtZW51VXRpbHMuYmFja3VwU3VwcG9ydGVkTm9kZXMubGVu Z3RoOyBpZHgrKykgewogICAgICAgICBtZW51cy5wdXNoKHsKLSAgICAgICAgICBuYW1lOiAnYmFj a3VwXycgKyBiYWNrdXBfc3VwcG9ydGVkX25vZGVzW2lkeF0sCi0gICAgICAgICAgbm9kZTogYmFj a3VwX3N1cHBvcnRlZF9ub2Rlc1tpZHhdLAorICAgICAgICAgIG5hbWU6ICdiYWNrdXBfJyArIG1l bnVVdGlscy5iYWNrdXBTdXBwb3J0ZWROb2Rlc1tpZHhdLAorICAgICAgICAgIG5vZGU6IG1lbnVV dGlscy5iYWNrdXBTdXBwb3J0ZWROb2Rlc1tpZHhdLAogICAgICAgICAgIG1vZHVsZTogdGhpcywK ICAgICAgICAgICBhcHBsaWVzOiBbJ2NvbnRleHQnXSwKICAgICAgICAgICBjYWxsYmFjazogJ2Jh Y2t1cF9vYmplY3RzJywKICAgICAgICAgICBwcmlvcml0eTogMTEsCiAgICAgICAgICAgbGFiZWw6 IGdldHRleHQoJ0JhY2t1cC4uLicpLAogICAgICAgICAgIGljb246ICdmYSBmYS1mbG9wcHktbycs Ci0gICAgICAgICAgZW5hYmxlOiBtZW51X2VuYWJsZWQsCisgICAgICAgICAgZW5hYmxlOiBtZW51 VXRpbHMubWVudUVuYWJsZWQuYmluZChwZ0Jyb3dzZXIpLAogICAgICAgICB9KTsKICAgICAgIH0K CkBAIC01MjEsNTMxICs0ODAsMjUgQEAgY29tbW9uVXRpbHMKICAgICB9LAoKICAgICAvLyBDYWxs YmFjayB0byBkcmF3IEJhY2t1cCBEaWFsb2cgZm9yIGdsb2JhbHMvc2VydmVyCi0gICAgc3RhcnRf YmFja3VwX2dsb2JhbF9zZXJ2ZXI6IGZ1bmN0aW9uKGFjdGlvbiwgaXRlbSwgcGFyYW1zKSB7Ci0g ICAgICB2YXIgaSA9IGl0ZW0gfHwgcGdCcm93c2VyLnRyZWUuc2VsZWN0ZWQoKSwKLSAgICAgICAg c2VydmVyX2RhdGEgPSBudWxsOwotCi0gICAgICB3aGlsZSAoaSkgewotICAgICAgICB2YXIgbm9k ZV9kYXRhID0gcGdCcm93c2VyLnRyZWUuaXRlbURhdGEoaSk7Ci0gICAgICAgIGlmIChub2RlX2Rh dGEuX3R5cGUgPT0gJ3NlcnZlcicpIHsKLSAgICAgICAgICBzZXJ2ZXJfZGF0YSA9IG5vZGVfZGF0 YTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwZ0Jyb3dzZXIu dHJlZS5oYXNQYXJlbnQoaSkpIHsKLSAgICAgICAgICBpID0gJChwZ0Jyb3dzZXIudHJlZS5wYXJl bnQoaSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KAotICAg ICAgICAgICAgZ2V0dGV4dCgnQmFja3VwIEVycm9yJyksCi0gICAgICAgICAgICBnZXR0ZXh0KCdQ bGVhc2Ugc2VsZWN0IHNlcnZlciBvciBjaGlsZCBub2RlIGZyb20gdGhlIGJyb3dzZXIgdHJlZS4n KQotICAgICAgICAgICk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQot ICAgICAgaWYgKCFzZXJ2ZXJfZGF0YSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAg ICAgIHZhciBtb2R1bGUgPSAncGF0aHMnLAotICAgICAgICBwcmVmZXJlbmNlX25hbWUgPSAncGdf YmluX2RpcicsCi0gICAgICAgIG1zZyA9IGdldHRleHQoJ1BsZWFzZSBjb25maWd1cmUgdGhlIFBv c3RncmVTUUwgQmluYXJ5IFBhdGggaW4gdGhlIFByZWZlcmVuY2VzIGRpYWxvZy4nKTsKLQotICAg ICAgaWYgKChzZXJ2ZXJfZGF0YS50eXBlICYmIHNlcnZlcl9kYXRhLnR5cGUgPT0gJ3BwYXMnKSB8 fAotICAgICAgICBzZXJ2ZXJfZGF0YS5zZXJ2ZXJfdHlwZSA9PSAncHBhcycpIHsKLSAgICAgICAg cHJlZmVyZW5jZV9uYW1lID0gJ3BwYXNfYmluX2Rpcic7Ci0gICAgICAgIG1zZyA9IGdldHRleHQo J1BsZWFzZSBjb25maWd1cmUgdGhlIEVEQiBBZHZhbmNlZCBTZXJ2ZXIgQmluYXJ5IFBhdGggaW4g dGhlIFByZWZlcmVuY2VzIGRpYWxvZy4nKTsKLSAgICAgIH0KLQotICAgICAgdmFyIHByZWZlcmVu Y2UgPSBwZ0Jyb3dzZXIuZ2V0X3ByZWZlcmVuY2UobW9kdWxlLCBwcmVmZXJlbmNlX25hbWUpOwot Ci0gICAgICBpZiAocHJlZmVyZW5jZSkgewotICAgICAgICBpZiAoIXByZWZlcmVuY2UudmFsdWUp IHsKLSAgICAgICAgICBhbGVydGlmeS5hbGVydChnZXR0ZXh0KCdDb25maWd1cmF0aW9uIHJlcXVp cmVkJyksIG1zZyk7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9IGVsc2Ug ewotICAgICAgICBhbGVydGlmeS5hbGVydCgKLSAgICAgICAgICBnZXR0ZXh0KCdCYWNrdXAgRXJy b3InKSwKLSAgICAgICAgICBTKGdldHRleHQoJ0ZhaWxlZCB0byBsb2FkIHByZWZlcmVuY2UgJXMg b2YgbW9kdWxlICVzJykpLnNwcmludGYocHJlZmVyZW5jZV9uYW1lLCBtb2R1bGUpLnZhbHVlKCkK LSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICB2YXIgb2ZfdHlw ZSA9IHVuZGVmaW5lZDsKLQotICAgICAgLy8gU2V0IE5vdGVzIGFjY29yZGluZyB0byB0eXBlIG9m IGJhY2t1cAotICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHBhcmFtc1snZ2xvYmFscyddKSAmJiBw YXJhbXNbJ2dsb2JhbHMnXSkgewotICAgICAgICBvZl90eXBlID0gJ2dsb2JhbHMnOwotICAgICAg fSBlbHNlIHsKLSAgICAgICAgb2ZfdHlwZSA9ICdzZXJ2ZXInOwotICAgICAgfQotCi0gICAgICB2 YXIgRGlhbG9nTmFtZSA9ICdCYWNrdXBEaWFsb2dfJyArIG9mX3R5cGUsCi0gICAgICAgIERpYWxv Z1RpdGxlID0gKChvZl90eXBlID09ICdnbG9iYWxzJykgPwotICAgICAgICAgIGdldHRleHQoJ0Jh Y2t1cCBHbG9iYWxzLi4uJykgOgotICAgICAgICAgIGdldHRleHQoJ0JhY2t1cCBTZXJ2ZXIuLi4n KSk7Ci0KLSAgICAgIGlmICghYWxlcnRpZnlbRGlhbG9nTmFtZV0pIHsKLSAgICAgICAgYWxlcnRp ZnkuZGlhbG9nKERpYWxvZ05hbWUsIGZ1bmN0aW9uIGZhY3RvcnkoKSB7Ci0gICAgICAgICAgcmV0 dXJuIHsKLSAgICAgICAgICAgIG1haW46IGZ1bmN0aW9uKHRpdGxlKSB7Ci0gICAgICAgICAgICAg IHRoaXMuc2V0KCd0aXRsZScsIHRpdGxlKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBi dWlsZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgIGFsZXJ0aWZ5LnBnRGlhbG9nQnVpbGQu YXBwbHkodGhpcyk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9u KCkgewotICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFt7 Ci0gICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKLSAgICAgICAgICAgICAgICAgIGNsYXNzTmFt ZTogJ2J0biBidG4tZGVmYXVsdCBwdWxsLWxlZnQgZmEgZmEtbGcgZmEtaW5mbycsCi0gICAgICAg ICAgICAgICAgICBhdHRyczogewotICAgICAgICAgICAgICAgICAgICBuYW1lOiAnb2JqZWN0X2hl bHAnLAotICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJywKLSAgICAgICAgICAgICAg ICAgICAgdXJsOiAnYmFja3VwLmh0bWwnLAotICAgICAgICAgICAgICAgICAgICBsYWJlbDogZ2V0 dGV4dCgnQmFja3VwJyksCi0gICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIH0s IHsKLSAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAotICAgICAgICAgICAgICAgICAga2V5OiAx MTIsCi0gICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdidG4gYnRuLWRlZmF1bHQgcHVsbC1s ZWZ0IGZhIGZhLWxnIGZhLXF1ZXN0aW9uJywKLSAgICAgICAgICAgICAgICAgIGF0dHJzOiB7Ci0g ICAgICAgICAgICAgICAgICAgIG5hbWU6ICdkaWFsb2dfaGVscCcsCi0gICAgICAgICAgICAgICAg ICAgIHR5cGU6ICdidXR0b24nLAotICAgICAgICAgICAgICAgICAgICBsYWJlbDogZ2V0dGV4dCgn QmFja3VwJyksCi0gICAgICAgICAgICAgICAgICAgIHVybDogdXJsX2ZvcignaGVscC5zdGF0aWMn LCB7Ci0gICAgICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJ2JhY2t1cF9kaWFsb2cuaHRt bCcsCi0gICAgICAgICAgICAgICAgICAgIH0pLAotICAgICAgICAgICAgICAgICAgfSwKLSAgICAg ICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdCYWNrdXAn KSwKLSAgICAgICAgICAgICAgICAgIGtleTogMTMsCi0gICAgICAgICAgICAgICAgICBjbGFzc05h bWU6ICdidG4gYnRuLXByaW1hcnkgZmEgZmEtbGcgZmEtc2F2ZSBwZy1hbGVydGlmeS1idXR0b24n LAotICAgICAgICAgICAgICAgICAgJ2RhdGEtYnRuLW5hbWUnOiAnYmFja3VwJywKLSAgICAgICAg ICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdDYW5jZWwnKSwK LSAgICAgICAgICAgICAgICAgIGtleTogMjcsCi0gICAgICAgICAgICAgICAgICBjbGFzc05hbWU6 ICdidG4gYnRuLWRhbmdlciBmYSBmYS1sZyBmYS10aW1lcyBwZy1hbGVydGlmeS1idXR0b24nLAot ICAgICAgICAgICAgICAgICAgJ2RhdGEtYnRuLW5hbWUnOiAnY2FuY2VsJywKLSAgICAgICAgICAg ICAgICB9XSwKLSAgICAgICAgICAgICAgICAvLyBTZXQgb3B0aW9ucyBmb3IgZGlhbG9nCi0gICAg ICAgICAgICAgICAgb3B0aW9uczogewotICAgICAgICAgICAgICAgICAgdGl0bGU6IERpYWxvZ1Rp dGxlLAotICAgICAgICAgICAgICAgICAgLy9kaXNhYmxlIGJvdGggcGFkZGluZyBhbmQgb3ZlcmZs b3cgY29udHJvbC4KLSAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICExLAotICAgICAgICAgICAg ICAgICAgb3ZlcmZsb3c6ICExLAotICAgICAgICAgICAgICAgICAgbW9kZWw6IDAsCi0gICAgICAg ICAgICAgICAgICByZXNpemFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgICBtYXhpbWl6YWJs ZTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgIHBpbm5hYmxlOiBmYWxzZSwKLSAgICAgICAgICAg ICAgICAgIGNsb3NhYmxlQnlEaW1tZXI6IGZhbHNlLAotICAgICAgICAgICAgICAgICAgbW9kYWw6 IGZhbHNlLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgIH07Ci0gICAgICAgICAg ICB9LAotICAgICAgICAgICAgaG9va3M6IHsKLSAgICAgICAgICAgICAgLy8gVHJpZ2dlcmVkIHdo ZW4gdGhlIGRpYWxvZyBpcyBjbG9zZWQKLSAgICAgICAgICAgICAgb25jbG9zZTogZnVuY3Rpb24o KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlldykgewotICAgICAgICAgICAgICAgICAg Ly8gY2xlYXIgb3VyIGJhY2tmb3JtIG1vZGVsL3ZpZXcKLSAgICAgICAgICAgICAgICAgIHRoaXMu dmlldy5yZW1vdmUoewotICAgICAgICAgICAgICAgICAgICBkYXRhOiB0cnVlLAotICAgICAgICAg ICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgc2lsZW50OiB0 cnVlLAotICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICB9LAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHByZXBhcmU6IGZ1bmN0aW9uKCkg ewotICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICAgIC8vIERpc2Fi bGUgQmFja3VwIGJ1dHRvbiB1bnRpbCB1c2VyIHByb3ZpZGVzIEZpbGVuYW1lCi0gICAgICAgICAg ICAgIHRoaXMuX19pbnRlcm5hbC5idXR0b25zWzJdLmVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwot Ci0gICAgICAgICAgICAgIHZhciAkY29udGFpbmVyID0gJCgnPGRpdiBjbGFzcz1cJ2JhY2t1cF9k aWFsb2dcJz48L2Rpdj4nKTsKLSAgICAgICAgICAgICAgLy8gRmluZCBjdXJyZW50L3NlbGVjdGVk IG5vZGUKLSAgICAgICAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwKLSAgICAgICAgICAg ICAgICBpID0gdC5zZWxlY3RlZCgpLAotICAgICAgICAgICAgICAgIGQgPSBpICYmIGkubGVuZ3Ro ID09IDEgPyB0Lml0ZW1EYXRhKGkpIDogdW5kZWZpbmVkLAotICAgICAgICAgICAgICAgIG5vZGUg PSBkICYmIHBnQnJvd3Nlci5Ob2Rlc1tkLl90eXBlXTsKLQotICAgICAgICAgICAgICBpZiAoIWQp Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAvLyBDcmVhdGUgdHJlZUlu Zm8KLSAgICAgICAgICAgICAgdmFyIHRyZWVJbmZvID0gbm9kZS5nZXRUcmVlTm9kZUhpZXJhcmNo eS5hcHBseShub2RlLCBbaV0pOwotICAgICAgICAgICAgICAvLyBJbnN0YW5jZSBvZiBiYWNrYm9u ZSBtb2RlbAotICAgICAgICAgICAgICB2YXIgbmV3TW9kZWwgPSBuZXcgQmFja3VwTW9kZWwoewot ICAgICAgICAgICAgICAgICAgdHlwZTogb2ZfdHlwZSwKLSAgICAgICAgICAgICAgICB9LCB7Ci0g ICAgICAgICAgICAgICAgICBub2RlX2luZm86IHRyZWVJbmZvLAotICAgICAgICAgICAgICAgIH0p LAotICAgICAgICAgICAgICAgIGZpZWxkcyA9IEJhY2tmb3JtLmdlbmVyYXRlVmlld1NjaGVtYSgK LSAgICAgICAgICAgICAgICAgIHRyZWVJbmZvLCBuZXdNb2RlbCwgJ2NyZWF0ZScsIG5vZGUsIHRy ZWVJbmZvLnNlcnZlciwgdHJ1ZQotICAgICAgICAgICAgICAgICk7Ci0KLSAgICAgICAgICAgICAg dmFyIHZpZXcgPSB0aGlzLnZpZXcgPSBuZXcgQmFja2Zvcm0uRGlhbG9nKHsKLSAgICAgICAgICAg ICAgICBlbDogJGNvbnRhaW5lciwKLSAgICAgICAgICAgICAgICBtb2RlbDogbmV3TW9kZWwsCi0g ICAgICAgICAgICAgICAgc2NoZW1hOiBmaWVsZHMsCi0gICAgICAgICAgICAgIH0pOwotICAgICAg ICAgICAgICAvLyBBZGQgb3VyIGNsYXNzIHRvIGFsZXJ0aWZ5Ci0gICAgICAgICAgICAgICQodGhp cy5lbGVtZW50cy5ib2R5LmNoaWxkTm9kZXNbMF0pLmFkZENsYXNzKAotICAgICAgICAgICAgICAg ICdhbGVydGlmeV90b29sc19kaWFsb2dfcHJvcGVydGllcyBvYmpfcHJvcGVydGllcycKLSAgICAg ICAgICAgICAgKTsKLSAgICAgICAgICAgICAgLy8gUmVuZGVyIGRpYWxvZwotICAgICAgICAgICAg ICB2aWV3LnJlbmRlcigpOwotCi0gICAgICAgICAgICAgIHRoaXMuZWxlbWVudHMuY29udGVudC5h cHBlbmRDaGlsZCgkY29udGFpbmVyLmdldCgwKSk7Ci0KLSAgICAgICAgICAgICAgdmFyIGNvbnRh aW5lciA9IHZpZXcuJGVsLmZpbmQoJy50YWItY29udGVudDpmaXJzdCA+IC50YWItcGFuZS5hY3Rp dmU6Zmlyc3QnKTsKLSAgICAgICAgICAgICAgY29tbW9uVXRpbHMuZmluZEFuZFNldEZvY3VzKGNv bnRhaW5lcik7Ci0KLSAgICAgICAgICAgICAgLy8gTGlzdGVuIHRvIG1vZGVsICYgaWYgZmlsZW5h bWUgaXMgcHJvdmlkZWQgdGhlbiBlbmFibGUgQmFja3VwIGJ1dHRvbgotICAgICAgICAgICAgICB0 aGlzLnZpZXcubW9kZWwub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg IGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLmdldCgnZmlsZScpKSAmJiB0aGlzLmdldCgnZmlsZScp ICE9PSAnJykgewotICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLmNsZWFyKCk7Ci0g ICAgICAgICAgICAgICAgICBzZWxmLl9faW50ZXJuYWwuYnV0dG9uc1syXS5lbGVtZW50LmRpc2Fi bGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg IHNlbGYuX19pbnRlcm5hbC5idXR0b25zWzJdLmVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwotICAg ICAgICAgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgnZmlsZScsIGdldHRleHQoJ1BsZWFz ZSBwcm92aWRlIGEgZmlsZW5hbWUnKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICB9KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAvLyBDYWxsYmFjayBmdW5jdGlvbnMg d2hlbiBjbGljayBvbiB0aGUgYnV0dG9ucyBvZiB0aGUgQWxlcnRpZnkgZGlhbG9ncwotICAgICAg ICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgLy8gRmV0Y2ggY3Vy cmVudCBzZXJ2ZXIgaWQKLSAgICAgICAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwKLSAg ICAgICAgICAgICAgICBpID0gdC5zZWxlY3RlZCgpLAotICAgICAgICAgICAgICAgIGQgPSBpICYm IGkubGVuZ3RoID09IDEgPyB0Lml0ZW1EYXRhKGkpIDogdW5kZWZpbmVkLAotICAgICAgICAgICAg ICAgIG5vZGUgPSBkICYmIHBnQnJvd3Nlci5Ob2Rlc1tkLl90eXBlXTsKLQotICAgICAgICAgICAg ICBpZiAoZS5idXR0b24uZWxlbWVudC5uYW1lID09ICdkaWFsb2dfaGVscCcgfHwgZS5idXR0b24u ZWxlbWVudC5uYW1lID09ICdvYmplY3RfaGVscCcpIHsKLSAgICAgICAgICAgICAgICBlLmNhbmNl bCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcGdCcm93c2VyLnNob3dIZWxwKGUuYnV0dG9uLmVs ZW1lbnQubmFtZSwgZS5idXR0b24uZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3VybCcpLAotICAgICAg ICAgICAgICAgICAgbm9kZSwgaSwgZS5idXR0b24uZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2xhYmVs JykpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAg ICAgICAgIGlmIChlLmJ1dHRvblsnZGF0YS1idG4tbmFtZSddID09PSAnYmFja3VwJykgewotCi0g ICAgICAgICAgICAgICAgaWYgKCFkKQotICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg ICAgICAgICAgICAgdmFyIHRyZWVJbmZvID0gbm9kZS5nZXRUcmVlTm9kZUhpZXJhcmNoeS5hcHBs eShub2RlLCBbaV0pOwotCi0gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAotICAgICAg ICAgICAgICAgICAgYmFzZVVybCA9IHVybF9mb3IoJ2JhY2t1cC5jcmVhdGVfc2VydmVyX2pvYics IHsKLSAgICAgICAgICAgICAgICAgICAgJ3NpZCc6IHRyZWVJbmZvLnNlcnZlci5faWQsCi0gICAg ICAgICAgICAgICAgICB9KSwKLSAgICAgICAgICAgICAgICAgIGFyZ3MgPSB0aGlzLnZpZXcubW9k ZWwudG9KU09OKCk7Ci0KLSAgICAgICAgICAgICAgICAkLmFqYXgoewotICAgICAgICAgICAgICAg ICAgdXJsOiBiYXNlVXJsLAotICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCi0gICAg ICAgICAgICAgICAgICBkYXRhOiB7Ci0gICAgICAgICAgICAgICAgICAgICdkYXRhJzogSlNPTi5z dHJpbmdpZnkoYXJncyksCi0gICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAg c3VjY2VzczogZnVuY3Rpb24ocmVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3Vj Y2VzcykgewotICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LnN1Y2Nlc3MoZ2V0dGV4dCgn QmFja3VwIGpvYiBjcmVhdGVkLicpLCA1KTsKLSAgICAgICAgICAgICAgICAgICAgICBwZ0Jyb3dz ZXIuRXZlbnRzLnRyaWdnZXIoJ3BnYWRtaW4tYmdwcm9jZXNzOmNyZWF0ZWQnLCBzZWxmKTsKLSAg ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICBjb25zb2xl Lndhcm4ocmVzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfSwK LSAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHsKLSAgICAgICAgICAgICAg ICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyID0gJC5wYXJzZUpTT04o eGhyLnJlc3BvbnNlVGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQo Ci0gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXh0KCdCYWNrdXAgam9iIGZhaWxlZC4nKSwK LSAgICAgICAgICAgICAgICAgICAgICAgIGVyci5lcnJvcm1zZwotICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAg ICAgICAgICBjb25zb2xlLndhcm4oZS5zdGFjayB8fCBlKTsKLSAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICB9OwotICAgICAgICB9KTsKLSAgICAgIH0K LSAgICAgIGFsZXJ0aWZ5W0RpYWxvZ05hbWVdKHRydWUpLnJlc2l6ZVRvKCc2MCUnLCAnNTAlJyk7 CisgICAgc3RhcnRfYmFja3VwX2dsb2JhbF9zZXJ2ZXI6IGZ1bmN0aW9uKGFjdGlvbiwgdHJlZUl0 ZW0sIHBhcmFtcykgeworICAgICAgbGV0IGRpYWxvZyA9IG5ldyBnbG9iYWxCYWNrdXBEaWFsb2cu QmFja3VwRGlhbG9nKAorICAgICAgICBwZ0Jyb3dzZXIsCisgICAgICAgICQsCisgICAgICAgIGFs ZXJ0aWZ5LAorICAgICAgICBCYWNrdXBNb2RlbAorICAgICAgKTsKKyAgICAgIGRpYWxvZy5kcmF3 KGFjdGlvbiwgdHJlZUl0ZW0sIHBhcmFtcyk7CiAgICAgfSwKCiAgICAgLy8gQ2FsbGJhY2sgdG8g ZHJhdyBCYWNrdXAgRGlhbG9nIGZvciBvYmplY3RzCiAgICAgYmFja3VwX29iamVjdHM6IGZ1bmN0 aW9uKGFjdGlvbiwgdHJlZUl0ZW0pIHsKLQotICAgICAgdmFyIGkgPSB0cmVlSXRlbSB8fCBwZ0Jy b3dzZXIudHJlZS5zZWxlY3RlZCgpLAotICAgICAgICBzZXJ2ZXJfZGF0YSA9IG51bGw7Ci0KLSAg ICAgIHdoaWxlIChpKSB7Ci0gICAgICAgIHZhciBub2RlX2RhdGEgPSBwZ0Jyb3dzZXIudHJlZS5p dGVtRGF0YShpKTsKLSAgICAgICAgaWYgKG5vZGVfZGF0YS5fdHlwZSA9PSAnc2VydmVyJykgewot ICAgICAgICAgIHNlcnZlcl9kYXRhID0gbm9kZV9kYXRhOwotICAgICAgICAgIGJyZWFrOwotICAg ICAgICB9Ci0KLSAgICAgICAgaWYgKHBnQnJvd3Nlci50cmVlLmhhc1BhcmVudChpKSkgewotICAg ICAgICAgIGkgPSAkKHBnQnJvd3Nlci50cmVlLnBhcmVudChpKSk7Ci0gICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgYWxlcnRpZnkuYWxlcnQoCi0gICAgICAgICAgICBnZXR0ZXh0KCdCYWNrdXAg RXJyb3InKSwKLSAgICAgICAgICAgIGdldHRleHQoJ1BsZWFzZSBzZWxlY3Qgc2VydmVyIG9yIGNo aWxkIG5vZGUgZnJvbSB0cmVlLicpCi0gICAgICAgICAgKTsKLSAgICAgICAgICBicmVhazsKLSAg ICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoIXNlcnZlcl9kYXRhKSB7Ci0gICAgICAgIHJl dHVybjsKLSAgICAgIH0KLQotICAgICAgdmFyIG1vZHVsZSA9ICdwYXRocycsCi0gICAgICAgIHBy ZWZlcmVuY2VfbmFtZSA9ICdwZ19iaW5fZGlyJywKLSAgICAgICAgbXNnID0gZ2V0dGV4dCgnUGxl YXNlIHNldCBiaW5hcnkgcGF0aCBmb3IgUG9zdGdyZVNRTCBTZXJ2ZXIgZnJvbSBwcmVmZXJlbmNl cy4nKTsKLQotICAgICAgaWYgKChzZXJ2ZXJfZGF0YS50eXBlICYmIHNlcnZlcl9kYXRhLnR5cGUg PT0gJ3BwYXMnKSB8fAotICAgICAgICBzZXJ2ZXJfZGF0YS5zZXJ2ZXJfdHlwZSA9PSAncHBhcycp IHsKLSAgICAgICAgcHJlZmVyZW5jZV9uYW1lID0gJ3BwYXNfYmluX2Rpcic7Ci0gICAgICAgIG1z ZyA9IGdldHRleHQoJ1BsZWFzZSBzZXQgYmluYXJ5IHBhdGggZm9yIEVEQiBQb3N0Z3JlcyBBZHZh bmNlZCBTZXJ2ZXIgZnJvbSBwcmVmZXJlbmNlcy4nKTsKLSAgICAgIH0KLQotICAgICAgdmFyIHBy ZWZlcmVuY2UgPSBwZ0Jyb3dzZXIuZ2V0X3ByZWZlcmVuY2UobW9kdWxlLCBwcmVmZXJlbmNlX25h bWUpOwotCi0gICAgICBpZiAocHJlZmVyZW5jZSkgewotICAgICAgICBpZiAoIXByZWZlcmVuY2Uu dmFsdWUpIHsKLSAgICAgICAgICBhbGVydGlmeS5hbGVydChnZXR0ZXh0KCdDb25maWd1cmF0aW9u IHJlcXVpcmVkJyksIG1zZyk7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9 IGVsc2UgewotICAgICAgICBhbGVydGlmeS5hbGVydCgKLSAgICAgICAgICBnZXR0ZXh0KCdCYWNr dXAgRXJyb3InKSwKLSAgICAgICAgICBTKGdldHRleHQoJ0ZhaWxlZCB0byBsb2FkIHByZWZlcmVu Y2UgJXMgb2YgbW9kdWxlICVzJykpLnNwcmludGYocHJlZmVyZW5jZV9uYW1lLCBtb2R1bGUpLnZh bHVlKCkKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICB2YXIg dGl0bGUgPSBTKGdldHRleHQoJ0JhY2t1cCAoJXM6ICVzKScpKSwKLSAgICAgICAgdHJlZSA9IHBn QnJvd3Nlci50cmVlLAotICAgICAgICBpdGVtID0gdHJlZUl0ZW0gfHwgdHJlZS5zZWxlY3RlZCgp LAotICAgICAgICBkYXRhID0gaXRlbSAmJiBpdGVtLmxlbmd0aCA9PSAxICYmIHRyZWUuaXRlbURh dGEoaXRlbSksCi0gICAgICAgIG5vZGUgPSBkYXRhICYmIGRhdGEuX3R5cGUgJiYgcGdCcm93c2Vy Lk5vZGVzW2RhdGEuX3R5cGVdOwotCi0gICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsK LQotICAgICAgdGl0bGUgPSB0aXRsZS5zcHJpbnRmKG5vZGUubGFiZWwsIGRhdGEubGFiZWwpLnZh bHVlKCk7Ci0KLSAgICAgIGlmICghYWxlcnRpZnkuYmFja3VwX29iamVjdHMpIHsKLSAgICAgICAg Ly8gQ3JlYXRlIERpYWxvZyB0aXRsZSBvbiB0aGUgZmx5IHdpdGggbm9kZSBkZXRhaWxzCi0gICAg ICAgIGFsZXJ0aWZ5LmRpYWxvZygnYmFja3VwX29iamVjdHMnLCBmdW5jdGlvbiBmYWN0b3J5KCkg ewotICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICBtYWluOiBmdW5jdGlvbih0aXRsZSkg ewotICAgICAgICAgICAgICB0aGlzLnNldCgndGl0bGUnLCB0aXRsZSk7Ci0gICAgICAgICAgICB9 LAotICAgICAgICAgICAgYnVpbGQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICBhbGVydGlm eS5wZ0RpYWxvZ0J1aWxkLmFwcGx5KHRoaXMpOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAg IHNldHVwOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAg ICAgICBidXR0b25zOiBbewotICAgICAgICAgICAgICAgICAgdGV4dDogJycsCi0gICAgICAgICAg ICAgICAgICBjbGFzc05hbWU6ICdidG4gYnRuLWRlZmF1bHQgcHVsbC1sZWZ0IGZhIGZhLWxnIGZh LWluZm8nLAotICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKLSAgICAgICAgICAgICAgICAgICAg bmFtZTogJ29iamVjdF9oZWxwJywKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbics Ci0gICAgICAgICAgICAgICAgICAgIHVybDogJ2JhY2t1cC5odG1sJywKLSAgICAgICAgICAgICAg ICAgICAgbGFiZWw6IGdldHRleHQoJ0JhY2t1cCcpLAotICAgICAgICAgICAgICAgICAgfSwKLSAg ICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKLSAgICAgICAg ICAgICAgICAgIGtleTogMTEyLAotICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0 bi1kZWZhdWx0IHB1bGwtbGVmdCBmYSBmYS1sZyBmYS1xdWVzdGlvbicsCi0gICAgICAgICAgICAg ICAgICBhdHRyczogewotICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZGlhbG9nX2hlbHAnLAot ICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJywKLSAgICAgICAgICAgICAgICAgICAg bGFiZWw6IGdldHRleHQoJ0JhY2t1cCcpLAotICAgICAgICAgICAgICAgICAgICB1cmw6IHVybF9m b3IoJ2hlbHAuc3RhdGljJywgewotICAgICAgICAgICAgICAgICAgICAgICdmaWxlbmFtZSc6ICdi YWNrdXBfZGlhbG9nLmh0bWwnLAotICAgICAgICAgICAgICAgICAgICB9KSwKLSAgICAgICAgICAg ICAgICAgIH0sCi0gICAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICAgdGV4dDog Z2V0dGV4dCgnQmFja3VwJyksCi0gICAgICAgICAgICAgICAgICBrZXk6IDEzLAotICAgICAgICAg ICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1wcmltYXJ5IGZhIGZhLWxnIGZhLXNhdmUgcGct YWxlcnRpZnktYnV0dG9uJywKLSAgICAgICAgICAgICAgICAgICdkYXRhLWJ0bi1uYW1lJzogJ2Jh Y2t1cCcsCi0gICAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0 dGV4dCgnQ2FuY2VsJyksCi0gICAgICAgICAgICAgICAgICBrZXk6IDI3LAotICAgICAgICAgICAg ICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1kYW5nZXIgZmEgZmEtbGcgZmEtdGltZXMgcGctYWxl cnRpZnktYnV0dG9uJywKLSAgICAgICAgICAgICAgICAgICdkYXRhLWJ0bi1uYW1lJzogJ2NhbmNl bCcsCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgLy8gU2V0IG9wdGlvbnMg Zm9yIGRpYWxvZwotICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsKLSAgICAgICAgICAgICAgICAg IHRpdGxlOiB0aXRsZSwKLSAgICAgICAgICAgICAgICAgIC8vZGlzYWJsZSBib3RoIHBhZGRpbmcg YW5kIG92ZXJmbG93IGNvbnRyb2wuCi0gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAhMSwKLSAg ICAgICAgICAgICAgICAgIG92ZXJmbG93OiAhMSwKLSAgICAgICAgICAgICAgICAgIG1vZGVsOiAw LAotICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLAotICAgICAgICAgICAgICAgICAg bWF4aW1pemFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgICBwaW5uYWJsZTogZmFsc2UsCi0g ICAgICAgICAgICAgICAgICBjbG9zYWJsZUJ5RGltbWVyOiBmYWxzZSwKLSAgICAgICAgICAgICAg ICAgIG1vZGFsOiBmYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICB9Owot ICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGhvb2tzOiB7Ci0gICAgICAgICAgICAgIC8vIHRy aWdnZXJlZCB3aGVuIHRoZSBkaWFsb2cgaXMgY2xvc2VkCi0gICAgICAgICAgICAgIG9uY2xvc2U6 IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpZXcpIHsKLSAgICAgICAg ICAgICAgICAgIHRoaXMudmlldy5yZW1vdmUoewotICAgICAgICAgICAgICAgICAgICBkYXRhOiB0 cnVlLAotICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZSwKLSAgICAgICAgICAgICAg ICAgICAgc2lsZW50OiB0cnVlLAotICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHByZXBh cmU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAg ICAgICAgIC8vIERpc2FibGUgQmFja3VwIGJ1dHRvbiB1bnRpbCB1c2VyIHByb3ZpZGVzIEZpbGVu YW1lCi0gICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbC5idXR0b25zWzJdLmVsZW1lbnQuZGlz YWJsZWQgPSB0cnVlOwotICAgICAgICAgICAgICB2YXIgJGNvbnRhaW5lciA9ICQoJzxkaXYgY2xh c3M9XCdiYWNrdXBfZGlhbG9nXCc+PC9kaXY+Jyk7Ci0gICAgICAgICAgICAgIHZhciB0ID0gcGdC cm93c2VyLnRyZWUsCi0gICAgICAgICAgICAgICAgaSA9IHQuc2VsZWN0ZWQoKSwKLSAgICAgICAg ICAgICAgICBkID0gaSAmJiBpLmxlbmd0aCA9PSAxID8gdC5pdGVtRGF0YShpKSA6IHVuZGVmaW5l ZCwKLSAgICAgICAgICAgICAgICBub2RlID0gZCAmJiBwZ0Jyb3dzZXIuTm9kZXNbZC5fdHlwZV07 Ci0KLSAgICAgICAgICAgICAgaWYgKCFkKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAg ICAgICAgICAgICB2YXIgdHJlZUluZm8gPSBub2RlLmdldFRyZWVOb2RlSGllcmFyY2h5LmFwcGx5 KG5vZGUsIFtpXSk7Ci0KLSAgICAgICAgICAgICAgdmFyIG5ld01vZGVsID0gbmV3IEJhY2t1cE9i amVjdE1vZGVsKHt9LCB7Ci0gICAgICAgICAgICAgICAgICBub2RlX2luZm86IHRyZWVJbmZvLAot ICAgICAgICAgICAgICAgIH0pLAotICAgICAgICAgICAgICAgIGZpZWxkcyA9IEJhY2tmb3JtLmdl bmVyYXRlVmlld1NjaGVtYSgKLSAgICAgICAgICAgICAgICAgIHRyZWVJbmZvLCBuZXdNb2RlbCwg J2NyZWF0ZScsIG5vZGUsIHRyZWVJbmZvLnNlcnZlciwgdHJ1ZQotICAgICAgICAgICAgICAgICk7 Ci0KLSAgICAgICAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnZpZXcgPSBuZXcgQmFja2Zvcm0uRGlh bG9nKHsKLSAgICAgICAgICAgICAgICBlbDogJGNvbnRhaW5lciwKLSAgICAgICAgICAgICAgICBt b2RlbDogbmV3TW9kZWwsCi0gICAgICAgICAgICAgICAgc2NoZW1hOiBmaWVsZHMsCi0gICAgICAg ICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICQodGhpcy5lbGVtZW50cy5ib2R5LmNoaWxkTm9k ZXNbMF0pLmFkZENsYXNzKAotICAgICAgICAgICAgICAgICdhbGVydGlmeV90b29sc19kaWFsb2df cHJvcGVydGllcyBvYmpfcHJvcGVydGllcycKLSAgICAgICAgICAgICAgKTsKLQotICAgICAgICAg ICAgICB2aWV3LnJlbmRlcigpOwotCi0gICAgICAgICAgICAgIHRoaXMuZWxlbWVudHMuY29udGVu dC5hcHBlbmRDaGlsZCgkY29udGFpbmVyLmdldCgwKSk7Ci0KLSAgICAgICAgICAgICAgaWYodmll dykgewotICAgICAgICAgICAgICAgIHZpZXcuJGVsLmF0dHIoJ3RhYmluZGV4JywgLTEpOwotICAg ICAgICAgICAgICAgIC8vIHZhciBkaWFsb2dUYWJOYXZpZ2F0b3IgPSBwZ0Jyb3dzZXIua2V5Ym9h cmROYXZpZ2F0aW9uLmdldERpYWxvZ1RhYk5hdmlnYXRvcih2aWV3KTsKLSAgICAgICAgICAgICAg ICBwZ0Jyb3dzZXIua2V5Ym9hcmROYXZpZ2F0aW9uLmdldERpYWxvZ1RhYk5hdmlnYXRvcih2aWV3 KTsKLSAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gdmlldy4kZWwuZmluZCgnLnRhYi1j b250ZW50OmZpcnN0ID4gLnRhYi1wYW5lLmFjdGl2ZTpmaXJzdCcpOwotICAgICAgICAgICAgICAg IGNvbW1vblV0aWxzLmZpbmRBbmRTZXRGb2N1cyhjb250YWluZXIpOwotICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgIC8vIExpc3RlbiB0byBtb2RlbCAmIGlmIGZpbGVuYW1lIGlzIHByb3Zp ZGVkIHRoZW4gZW5hYmxlIEJhY2t1cCBidXR0b24KLSAgICAgICAgICAgICAgdGhpcy52aWV3Lm1v ZGVsLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAoIV8uaXNV bmRlZmluZWQodGhpcy5nZXQoJ2ZpbGUnKSkgJiYgdGhpcy5nZXQoJ2ZpbGUnKSAhPT0gJycpIHsK LSAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC5jbGVhcigpOwotICAgICAgICAgICAg ICAgICAgc2VsZi5fX2ludGVybmFsLmJ1dHRvbnNbMl0uZWxlbWVudC5kaXNhYmxlZCA9IGZhbHNl OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBzZWxmLl9faW50 ZXJuYWwuYnV0dG9uc1syXS5lbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg ICAgIHRoaXMuZXJyb3JNb2RlbC5zZXQoJ2ZpbGUnLCBnZXR0ZXh0KCdQbGVhc2UgcHJvdmlkZSBm aWxlbmFtZScpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAg ICAgICAgICB9LAotICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb25zIHdoZW4gY2xpY2sg b24gdGhlIGJ1dHRvbnMgb2YgdGhlIEFsZXJ0aWZ5IGRpYWxvZ3MKLSAgICAgICAgICAgIGNhbGxi YWNrOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgIC8vIEZldGNoIGN1cnJlbnQgc2VydmVy IGlkCi0gICAgICAgICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsCi0gICAgICAgICAgICAg ICAgaSA9IHQuc2VsZWN0ZWQoKSwKLSAgICAgICAgICAgICAgICBkID0gaSAmJiBpLmxlbmd0aCA9 PSAxID8gdC5pdGVtRGF0YShpKSA6IHVuZGVmaW5lZCwKLSAgICAgICAgICAgICAgICBub2RlID0g ZCAmJiBwZ0Jyb3dzZXIuTm9kZXNbZC5fdHlwZV07Ci0KLSAgICAgICAgICAgICAgaWYgKGUuYnV0 dG9uLmVsZW1lbnQubmFtZSA9PSAnZGlhbG9nX2hlbHAnIHx8IGUuYnV0dG9uLmVsZW1lbnQubmFt ZSA9PSAnb2JqZWN0X2hlbHAnKSB7Ci0gICAgICAgICAgICAgICAgZS5jYW5jZWwgPSB0cnVlOwot ICAgICAgICAgICAgICAgIHBnQnJvd3Nlci5zaG93SGVscChlLmJ1dHRvbi5lbGVtZW50Lm5hbWUs IGUuYnV0dG9uLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCd1cmwnKSwKLSAgICAgICAgICAgICAgICAg IG5vZGUsIGksIGUuYnV0dG9uLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCdsYWJlbCcpKTsKLSAgICAg ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBpZiAo ZS5idXR0b25bJ2RhdGEtYnRuLW5hbWUnXSA9PT0gJ2JhY2t1cCcpIHsKLSAgICAgICAgICAgICAg ICBpZiAoIWQpCi0gICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICB2 YXIgdHJlZUluZm8gPSBub2RlLmdldFRyZWVOb2RlSGllcmFyY2h5LmFwcGx5KG5vZGUsIFtpXSk7 Ci0KLSAgICAgICAgICAgICAgICAvLyBTZXQgY3VycmVudCBkYXRhYmFzZSBpbnRvIG1vZGVsCi0g ICAgICAgICAgICAgICAgdGhpcy52aWV3Lm1vZGVsLnNldCgnZGF0YWJhc2UnLCB0cmVlSW5mby5k YXRhYmFzZS5fbGFiZWwpOwotCi0gICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCByZW1vdmUgb25j ZSBvYmplY3QgdHJlZSBpcyBpbXBsZW1lbnRlZAotICAgICAgICAgICAgICAgIC8vIElmIHNlbGVj dGVkIG5vZGUgaXMgU2NoZW1hIHRoZW4gYWRkIGl0IGluIG1vZGVsCi0gICAgICAgICAgICAgICAg aWYgKGQuX3R5cGUgPT0gJ3NjaGVtYScpIHsKLSAgICAgICAgICAgICAgICAgIHZhciBzY2hlbWFz ID0gW107Ci0gICAgICAgICAgICAgICAgICBzY2hlbWFzLnB1c2goZC5fbGFiZWwpOwotICAgICAg ICAgICAgICAgICAgdGhpcy52aWV3Lm1vZGVsLnNldCgnc2NoZW1hcycsIHNjaGVtYXMpOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBJZiBzZWxlY3RlZCBub2RlIGlzIFRh YmxlIHRoZW4gYWRkIGl0IGluIG1vZGVsIGFsb25nIHdpdGgKLSAgICAgICAgICAgICAgICAvLyBp dHMgc2NoZW1hCi0gICAgICAgICAgICAgICAgaWYgKGQuX3R5cGUgPT0gJ3RhYmxlJykgewotICAg ICAgICAgICAgICAgICAgdGhpcy52aWV3Lm1vZGVsLnNldCgKLSAgICAgICAgICAgICAgICAgICAg J3RhYmxlcycsIFsKLSAgICAgICAgICAgICAgICAgICAgICBbdHJlZUluZm8uc2NoZW1hLl9sYWJl bCwgZC5fbGFiZWxdLAotICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgICAp OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFJlbW92ZSByYXRpbyBh dHRyaWJ1dGUgZnJvbSBtb2RlbCBpZiBpdCBoYXMgZW1wdHkgc3RyaW5nLgotICAgICAgICAgICAg ICAgIC8vIFRoZSB2YWxpZCB2YWx1ZSBjYW4gYmUgYmV0d2VlbiAwIHRvIDkuCi0gICAgICAgICAg ICAgICAgaWYgKF8uaXNFbXB0eSh0aGlzLnZpZXcubW9kZWwuZ2V0KCdyYXRpbycpKSkgewotICAg ICAgICAgICAgICAgICAgdGhpcy52aWV3Lm1vZGVsLnVuc2V0KCdyYXRpbycpOwotICAgICAgICAg ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcywKLSAgICAgICAgICAg ICAgICAgIGJhc2VVcmwgPSB1cmxfZm9yKCdiYWNrdXAuY3JlYXRlX29iamVjdF9qb2InLCB7Ci0g ICAgICAgICAgICAgICAgICAgICdzaWQnOiB0cmVlSW5mby5zZXJ2ZXIuX2lkLAotICAgICAgICAg ICAgICAgICAgfSksCi0gICAgICAgICAgICAgICAgICBhcmdzID0gdGhpcy52aWV3Lm1vZGVsLnRv SlNPTigpOwotCi0gICAgICAgICAgICAgICAgJC5hamF4KHsKLSAgICAgICAgICAgICAgICAgIHVy bDogYmFzZVVybCwKLSAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAotICAgICAgICAg ICAgICAgICAgZGF0YTogewotICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IEpTT04uc3RyaW5n aWZ5KGFyZ3MpLAotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgIHN1Y2Nl c3M6IGZ1bmN0aW9uKHJlcykgewotICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3Mp IHsKLSAgICAgICAgICAgICAgICAgICAgICBhbGVydGlmeS5zdWNjZXNzKGdldHRleHQoJ0JhY2t1 cCBqb2IgY3JlYXRlZC4nKSwgNSk7Ci0gICAgICAgICAgICAgICAgICAgICAgcGdCcm93c2VyLkV2 ZW50cy50cmlnZ2VyKCdwZ2FkbWluLWJncHJvY2VzczpjcmVhdGVkJywgc2VsZik7Ci0gICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICBl cnJvcjogZnVuY3Rpb24oeGhyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgdmFyIGVyciA9ICQucGFyc2VKU09OKHhoci5yZXNwb25zZVRleHQpOwot ICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KAotICAgICAgICAgICAgICAgICAg ICAgICAgZ2V0dGV4dCgnQmFja3VwIGpvYiBmYWlsZWQuJyksCi0gICAgICAgICAgICAgICAgICAg ICAgICBlcnIuZXJyb3Jtc2cKLSAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg ICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJu KGUuc3RhY2sgfHwgZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg IH0sCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0s Ci0gICAgICAgICAgfTsKLSAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAgICBhbGVydGlmeS5iYWNr dXBfb2JqZWN0cyh0aXRsZSkucmVzaXplVG8oJzY1JScsICc2MCUnKTsKKyAgICAgIGxldCBkaWFs b2cgPSBuZXcgZ2xvYmFsQmFja3VwRGlhbG9nLkJhY2t1cERpYWxvZygKKyAgICAgICAgcGdCcm93 c2VyLAorICAgICAgICAkLAorICAgICAgICBhbGVydGlmeSwKKyAgICAgICAgQmFja3VwT2JqZWN0 TW9kZWwKKyAgICAgICk7CisgICAgICBkaWFsb2cuZHJhdyhhY3Rpb24sIHRyZWVJdGVtLCBudWxs KTsKICAgICB9LAogICB9OwogICByZXR1cm4gcGdCcm93c2VyLkJhY2t1cDsKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlkL3N0YXRpYy9qcy9kYXRhZ3JpZC5qcyBiL3dlYi9w Z2FkbWluL3Rvb2xzL2RhdGFncmlkL3N0YXRpYy9qcy9kYXRhZ3JpZC5qcwppbmRleCA0NzNmMjBh ZC4uZDhkMWM5MDIgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlkL3N0YXRp Yy9qcy9kYXRhZ3JpZC5qcworKysgYi93ZWIvcGdhZG1pbi90b29scy9kYXRhZ3JpZC9zdGF0aWMv anMvZGF0YWdyaWQuanMKQEAgLTEsMTAgKzEsMTMgQEAKIGRlZmluZSgncGdhZG1pbi5kYXRhZ3Jp ZCcsIFsKICAgJ3NvdXJjZXMvZ2V0dGV4dCcsICdzb3VyY2VzL3VybF9mb3InLCAnanF1ZXJ5Jywg J3VuZGVyc2NvcmUnLAogICAncGdhZG1pbi5hbGVydGlmeWpzJywgJ3NvdXJjZXMvcGdhZG1pbics ICdidW5kbGVkX2NvZGVtaXJyb3InLAotICAnc291cmNlcy9zcWxlZGl0b3JfdXRpbHMnLCAnYmFj a2JvbmUnLCAnd2Nkb2NrZXInLAorICAnc291cmNlcy9zcWxlZGl0b3JfdXRpbHMnLCAnYmFja2Jv bmUnLCAnc291cmNlcy9kYXRhZ3JpZC9zaG93X2RhdGEnLAorICAnc291cmNlcy9kYXRhZ3JpZC9n ZXRfcGFuZWxfdGl0bGUnLAorICAnc291cmNlcy9kYXRhZ3JpZC9zaG93X3F1ZXJ5X3Rvb2wnLAor ICAnd2Nkb2NrZXInLAogXSwgZnVuY3Rpb24oCiAgIGdldHRleHQsIHVybF9mb3IsICQsIF8sIGFs ZXJ0aWZ5LCBwZ0FkbWluLCBjb2RlbWlycm9yLCBzcWxFZGl0b3JVdGlscywKLSAgQmFja2JvbmUK KyAgQmFja2JvbmUsIHNob3dEYXRhLCBwYW5lbFRpdGxlLCBzaG93UXVlcnlUb29sCiApIHsKICAg Ly8gU29tZSBzY3JpcHRzIGRvIGV4cG9ydCB0aGVpciBvYmplY3QgaW4gdGhlIHdpbmRvdyBvbmx5 LgogICAvLyBHZW5lcmFsbHkgdGhlIG9uZSwgd2hpY2ggZG8gbm8gaGF2ZSBBTUQgc3VwcG9ydC4K QEAgLTE2MSw1NSArMTY0LDcgQEAgZGVmaW5lKCdwZ2FkbWluLmRhdGFncmlkJywgWwoKICAgICAg IC8vIFRoaXMgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBzaG93IGRhdGEgd2hlbiB1c2VyIGNs aWNrIG9uIG1lbnUgaXRlbS4KICAgICAgIHNob3dfZGF0YV9ncmlkOiBmdW5jdGlvbihkYXRhLCBp KSB7Ci0gICAgICAgIHZhciBzZWxmID0gdGhpcywKLSAgICAgICAgICBkID0gcGdBZG1pbi5Ccm93 c2VyLnRyZWUuaXRlbURhdGEoaSk7Ci0gICAgICAgIGlmIChkID09PSB1bmRlZmluZWQpIHsKLSAg ICAgICAgICBhbGVydGlmeS5hbGVydCgKLSAgICAgICAgICAgIGdldHRleHQoJ0RhdGEgR3JpZCBF cnJvcicpLAotICAgICAgICAgICAgZ2V0dGV4dCgnTm8gb2JqZWN0IHNlbGVjdGVkLicpCi0gICAg ICAgICAgKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHZXQg dGhlIHBhcmVudCBkYXRhIGZyb20gdGhlIHRyZWUgbm9kZSBoaWVyYXJjaHkuCi0gICAgICAgIHZh ciBub2RlID0gcGdCcm93c2VyLk5vZGVzW2QuX3R5cGVdLAotICAgICAgICAgIHBhcmVudERhdGEg PSBub2RlLmdldFRyZWVOb2RlSGllcmFyY2h5KGkpOwotCi0gICAgICAgIC8vIElmIHNlcnZlciwg ZGF0YWJhc2Ugb3Igc2NoZW1hIGlzIHVuZGVmaW5lZCB0aGVuIHJldHVybiBmcm9tIHRoZSBmdW5j dGlvbi4KLSAgICAgICAgaWYgKHBhcmVudERhdGEuc2VydmVyID09PSB1bmRlZmluZWQgfHwgcGFy ZW50RGF0YS5kYXRhYmFzZSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAg ICAgICB9Ci0gICAgICAgIC8vIElmIHNjaGVtYSwgdmlldywgY2F0YWxvZyBvYmplY3QgYWxsIGFy ZSB1bmRlZmluZWQgdGhlbiByZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24uCi0gICAgICAgIGlmIChw YXJlbnREYXRhLnNjaGVtYSA9PT0gdW5kZWZpbmVkICYmIHBhcmVudERhdGEudmlldyA9PT0gdW5k ZWZpbmVkICYmCi0gICAgICAgICAgICAgcGFyZW50RGF0YS5jYXRhbG9nID09PSB1bmRlZmluZWQp IHsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgbnNwX25hbWUg PSAnJzsKLQotICAgICAgICBpZiAocGFyZW50RGF0YS5zY2hlbWEgIT0gdW5kZWZpbmVkKSB7Ci0g ICAgICAgICAgbnNwX25hbWUgPSBwYXJlbnREYXRhLnNjaGVtYS5sYWJlbDsKLSAgICAgICAgfQot ICAgICAgICBlbHNlIGlmIChwYXJlbnREYXRhLnZpZXcgIT0gdW5kZWZpbmVkKSB7Ci0gICAgICAg ICAgbnNwX25hbWUgPSBwYXJlbnREYXRhLnZpZXcubGFiZWw7Ci0gICAgICAgIH0KLSAgICAgICAg ZWxzZSBpZiAocGFyZW50RGF0YS5jYXRhbG9nICE9IHVuZGVmaW5lZCkgewotICAgICAgICAgIG5z cF9uYW1lID0gcGFyZW50RGF0YS5jYXRhbG9nLmxhYmVsOwotICAgICAgICB9Ci0gICAgICAgIHZh ciB1cmxfcGFyYW1zID0gewotICAgICAgICAgICdjbWRfdHlwZSc6IGRhdGEubW51aWQsCi0gICAg ICAgICAgJ29ial90eXBlJzogZC5fdHlwZSwKLSAgICAgICAgICAnc2dpZCc6IHBhcmVudERhdGEu c2VydmVyX2dyb3VwLl9pZCwKLSAgICAgICAgICAnc2lkJzogcGFyZW50RGF0YS5zZXJ2ZXIuX2lk LAotICAgICAgICAgICdkaWQnOiBwYXJlbnREYXRhLmRhdGFiYXNlLl9pZCwKLSAgICAgICAgICAn b2JqX2lkJzogZC5faWQsCi0gICAgICAgIH07Ci0KLSAgICAgICAgdmFyIGJhc2VVcmwgPSB1cmxf Zm9yKCdkYXRhZ3JpZC5pbml0aWFsaXplX2RhdGFncmlkJywgdXJsX3BhcmFtcyk7Ci0gICAgICAg IHZhciBncmlkX3RpdGxlID0gcGFyZW50RGF0YS5zZXJ2ZXIubGFiZWwgKyAnIC0gJyArIHBhcmVu dERhdGEuZGF0YWJhc2UubGFiZWwgKyAnIC0gJwotICAgICAgICAgICAgICAgICAgICAgICAgKyBu c3BfbmFtZSArICcuJyArIGQubGFiZWw7Ci0KLSAgICAgICAgc2VsZi5jcmVhdGVfdHJhbnNhY3Rp b24oYmFzZVVybCwgbnVsbCwgJ2ZhbHNlJywgcGFyZW50RGF0YS5zZXJ2ZXIuc2VydmVyX3R5cGUs ICcnLCBncmlkX3RpdGxlLCAnJyk7CisgICAgICAgIHNob3dEYXRhLnNob3dEYXRhR3JpZCh0aGlz LCBwZ0Jyb3dzZXIsIGFsZXJ0aWZ5LCBkYXRhLCBpKTsKICAgICAgIH0sCgogICAgICAgLy8gVGhp cyBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNob3cgZmlsdGVyZWQgZGF0YSB3aGVuIHVzZXIg Y2xpY2sgb24gbWVudSBpdGVtLgpAQCAtMzgyLDYzICszMzcsMTIgQEAgZGVmaW5lKCdwZ2FkbWlu LmRhdGFncmlkJywgWwogICAgICAgfSwKCiAgICAgICBnZXRfcGFuZWxfdGl0bGU6IGZ1bmN0aW9u KCkgewotICAgICAgICAvLyBHZXQgdGhlIHBhcmVudCBkYXRhIGZyb20gdGhlIHRyZWUgbm9kZSBo aWVyYXJjaHkuCi0gICAgICAgIHZhciB0cmVlID0gcGdBZG1pbi5Ccm93c2VyLnRyZWUsCi0gICAg ICAgICAgc2VsZWN0ZWRfaXRlbSA9IHRyZWUuc2VsZWN0ZWQoKSwKLSAgICAgICAgICBpdGVtX2Rh dGEgPSB0cmVlLml0ZW1EYXRhKHNlbGVjdGVkX2l0ZW0pOwotCi0gICAgICAgIHZhciBub2RlID0g cGdCcm93c2VyLk5vZGVzW2l0ZW1fZGF0YS5fdHlwZV0sCi0gICAgICAgICAgcGFyZW50RGF0YSA9 IG5vZGUuZ2V0VHJlZU5vZGVIaWVyYXJjaHkoc2VsZWN0ZWRfaXRlbSk7Ci0KLSAgICAgICAgLy8g SWYgc2VydmVyLCBkYXRhYmFzZSBpcyB1bmRlZmluZWQgdGhlbiByZXR1cm4gZnJvbSB0aGUgZnVu Y3Rpb24uCi0gICAgICAgIGlmIChwYXJlbnREYXRhLnNlcnZlciA9PT0gdW5kZWZpbmVkKSB7Ci0g ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIElmIERhdGFiYXNlIGlzIG5v dCBhdmFpbGFibGUgdGhlbiB1c2UgZGVmYXVsdCBkYgotICAgICAgICB2YXIgZGJfbGFiZWwgPSBw YXJlbnREYXRhLmRhdGFiYXNlID8gcGFyZW50RGF0YS5kYXRhYmFzZS5sYWJlbAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcGFyZW50RGF0YS5zZXJ2ZXIuZGI7 Ci0KLSAgICAgICAgdmFyIGdyaWRfdGl0bGUgPSBkYl9sYWJlbCArICcgb24gJyArIHBhcmVudERh dGEuc2VydmVyLnVzZXIubmFtZSArICdAJyArCi0gICAgICAgICAgICAgICAgcGFyZW50RGF0YS5z ZXJ2ZXIubGFiZWw7Ci0gICAgICAgIHJldHVybiBncmlkX3RpdGxlOworICAgICAgICByZXR1cm4g cGFuZWxUaXRsZS5nZXRQYW5lbFRpdGxlKHBnQnJvd3Nlcik7CiAgICAgICB9LAogICAgICAgLy8g VGhpcyBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNob3cgcXVlcnkgdG9vbCB3aGVuIHVzZXIg Y2xpY2sgb24gbWVudSBpdGVtLgotICAgICAgc2hvd19xdWVyeV90b29sOiBmdW5jdGlvbih1cmws IGksIHBhbmVsX3RpdGxlKSB7Ci0gICAgICAgIHZhciBzVVJMID0gdXJsIHx8ICcnLAotICAgICAg ICAgIGQgPSBwZ0FkbWluLkJyb3dzZXIudHJlZS5pdGVtRGF0YShpKTsKLQotICAgICAgICBwYW5l bF90aXRsZSA9IHBhbmVsX3RpdGxlIHx8ICcnOwotICAgICAgICBpZiAoZCA9PT0gdW5kZWZpbmVk KSB7Ci0gICAgICAgICAgYWxlcnRpZnkuYWxlcnQoCi0gICAgICAgICAgICBnZXR0ZXh0KCdRdWVy eSBUb29sIEVycm9yJyksCi0gICAgICAgICAgICBnZXR0ZXh0KCdObyBvYmplY3Qgc2VsZWN0ZWQu JykKLSAgICAgICAgICApOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg IC8vIEdldCB0aGUgcGFyZW50IGRhdGEgZnJvbSB0aGUgdHJlZSBub2RlIGhpZXJhcmNoeS4KLSAg ICAgICAgdmFyIG5vZGUgPSBwZ0Jyb3dzZXIuTm9kZXNbZC5fdHlwZV0sCi0gICAgICAgICAgcGFy ZW50RGF0YSA9IG5vZGUuZ2V0VHJlZU5vZGVIaWVyYXJjaHkoaSk7Ci0KLSAgICAgICAgLy8gSWYg c2VydmVyLCBkYXRhYmFzZSBpcyB1bmRlZmluZWQgdGhlbiByZXR1cm4gZnJvbSB0aGUgZnVuY3Rp b24uCi0gICAgICAgIGlmIChwYXJlbnREYXRhLnNlcnZlciA9PT0gdW5kZWZpbmVkKSB7Ci0gICAg ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHVybF9wYXJhbXMgPSB7Ci0g ICAgICAgICAgICAnc2dpZCc6IHBhcmVudERhdGEuc2VydmVyX2dyb3VwLl9pZCwKLSAgICAgICAg ICAgICdzaWQnOiBwYXJlbnREYXRhLnNlcnZlci5faWQsCi0gICAgICAgICAgfSwKLSAgICAgICAg ICB1cmxfZW5kcG9pbnQgPSAnZGF0YWdyaWQuaW5pdGlhbGl6ZV9xdWVyeV90b29sJzsKLSAgICAg ICAgLy8gSWYgZGF0YWJhc2Ugbm90IHByZXNlbnQgdGhlbiB1c2UgTWFpbnRlbmFuY2UgZGF0YWJh c2UKLSAgICAgICAgLy8gV2Ugd2lsbCBoYW5kbGUgdGhpcyBhdCBzZXJ2ZXIgc2lkZQotICAgICAg ICBpZiAocGFyZW50RGF0YS5kYXRhYmFzZSkgewotICAgICAgICAgIHVybF9wYXJhbXNbJ2RpZCdd ID0gcGFyZW50RGF0YS5kYXRhYmFzZS5faWQ7Ci0gICAgICAgICAgdXJsX2VuZHBvaW50ID0gJ2Rh dGFncmlkLmluaXRpYWxpemVfcXVlcnlfdG9vbF93aXRoX2RpZCc7Ci0gICAgICAgIH0KLSAgICAg ICAgdmFyIGJhc2VVcmwgPSB1cmxfZm9yKHVybF9lbmRwb2ludCwgdXJsX3BhcmFtcyk7Ci0KLSAg ICAgICAgdGhpcy5jcmVhdGVfdHJhbnNhY3Rpb24oYmFzZVVybCwgbnVsbCwgJ3RydWUnLCBwYXJl bnREYXRhLnNlcnZlci5zZXJ2ZXJfdHlwZSwgc1VSTCwgcGFuZWxfdGl0bGUsICcnLCBmYWxzZSk7 CisgICAgICBzaG93X3F1ZXJ5X3Rvb2w6IGZ1bmN0aW9uKHVybCwgYWNpVHJlZUlkZW50aWZpZXIs IHBhbmVsVGl0bGUpIHsKKyAgICAgICAgc2hvd1F1ZXJ5VG9vbC5zaG93UXVlcnlUb29sKHRoaXMs IHBnQnJvd3NlciwgYWxlcnRpZnksIHVybCwKKyAgICAgICAgICBhY2lUcmVlSWRlbnRpZmllciwg cGFuZWxUaXRsZSk7CiAgICAgICB9LAogICAgICAgY3JlYXRlX3RyYW5zYWN0aW9uOiBmdW5jdGlv bihiYXNlVXJsLCB0YXJnZXQsIGlzX3F1ZXJ5X3Rvb2wsIHNlcnZlcl90eXBlLCBzVVJMLCBwYW5l bF90aXRsZSwgc3FsX2ZpbHRlciwgcmVjcmVhdGUpIHsKICAgICAgICAgdmFyIHNlbGYgPSB0aGlz OwpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9iYWNrdXAvYmFja3VwX2Rp YWxvZ19zcGVjLmpzIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9iYWNrdXAvYmFja3VwX2Rp YWxvZ19zcGVjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5lMjcyZjA5 NAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvYmFja3VwL2Jh Y2t1cF9kaWFsb2dfc3BlYy5qcwpAQCAtMCwwICsxLDY1MSBAQAorLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRt aW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4 LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVh c2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworaW1wb3J0IHtCYWNr dXBEaWFsb2d9IGZyb20gJy4uLy4uLy4uL3BnYWRtaW4vc3RhdGljL2pzL2JhY2t1cC9iYWNrdXBf ZGlhbG9nJzsKK2ltcG9ydCB7VHJlZUZha2V9IGZyb20gJy4uL3RyZWUvdHJlZV9mYWtlJzsKK2lt cG9ydCBNb2NrQWRhcHRlciBmcm9tICdheGlvcy1tb2NrLWFkYXB0ZXInOworaW1wb3J0IGF4aW9z IGZyb20gJ2F4aW9zL2luZGV4JzsKK2ltcG9ydCB7RmFrZU1vZGVsfSBmcm9tICcuLi9mYWtlX21v ZGVsJzsKK2ltcG9ydCB7RGlhbG9nV3JhcHBlcn0gZnJvbSAiLi4vLi4vLi4vcGdhZG1pbi9zdGF0 aWMvanMvYmFja3VwL2JhY2t1cF9kaWFsb2dfd3JhcHBlciI7CisKK2NvbnN0IGNvbnRleHQgPSBk ZXNjcmliZTsKKworZGVzY3JpYmUoJ09iamVjdEJhY2t1cERpYWxvZycsICgpID0+IHsKKyAgbGV0 IGJhY2t1cERpYWxvZzsKKyAgbGV0IGJhY2t1cE5vZGU7CisgIGxldCBwZ0Jyb3dzZXI7CisgIGxl dCBqcXVlcnlTcHk7CisgIGxldCBhbGVydGlmeVNweTsKKyAgbGV0IGJhY2t1cE1vZGVsU3B5Owor ICBsZXQgYmFja2Zvcm07CisKKworICBsZXQgcm9vdE5vZGU7CisgIGxldCBzZXJ2ZXJUcmVlTm9k ZTsKKyAgbGV0IGRhdGFiYXNlVHJlZU5vZGU7CisgIGxldCBwcGFzU2VydmVyVHJlZU5vZGU7Cisg IGxldCBub0RhdGFOb2RlOworCisgIGJlZm9yZUVhY2goKCkgPT4geworICAgIHBnQnJvd3NlciA9 IHsKKyAgICAgIHRyZWVNZW51OiBuZXcgVHJlZUZha2UoKSwKKyAgICAgIE5vZGVzOiB7CisgICAg ICAgIHNlcnZlcjogeworICAgICAgICAgIGhhc0lkOiB0cnVlLAorICAgICAgICAgIGxhYmVsOiAn c2VydmVyJywKKyAgICAgICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogamFzbWluZS5jcmVhdGVT cHkoJ3NlcnZlci5nZXRUcmVlTm9kZUhpZXJhcmNoeScpLAorICAgICAgICB9LAorICAgICAgICBk YXRhYmFzZTogeworICAgICAgICAgIGhhc0lkOiB0cnVlLAorICAgICAgICAgIGxhYmVsOiAnZGF0 YWJhc2UnLAorICAgICAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBqYXNtaW5lLmNyZWF0ZVNw eSgnZGIuZ2V0VHJlZU5vZGVIaWVyYXJjaHknKSwKKyAgICAgICAgfSwKKyAgICAgICAgc2NoZW1h OiB7CisgICAgICAgICAgaGFzSWQ6IHRydWUsCisgICAgICAgICAgbGFiZWw6ICdzY2hlbWEnLAor ICAgICAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBqYXNtaW5lLmNyZWF0ZVNweSgnZGIuZ2V0 VHJlZU5vZGVIaWVyYXJjaHknKSwKKyAgICAgICAgfSwKKyAgICAgIH0KKyAgICB9OworICAgIHBn QnJvd3Nlci5Ob2Rlcy5zZXJ2ZXIuaGFzSWQgPSB0cnVlOworICAgIHBnQnJvd3Nlci5Ob2Rlcy5k YXRhYmFzZS5oYXNJZCA9IHRydWU7CisgICAganF1ZXJ5U3B5ID0gamFzbWluZS5jcmVhdGVTcHko J2pxdWVyeVNweScpOworICAgIGJhY2t1cE1vZGVsU3B5ID0gamFzbWluZS5jcmVhdGVTcHkoJ2Jh Y2t1cE1vZGVsU3B5Jyk7CisgICAgYmFja3VwTm9kZSA9IHt9OworICAgIGJhY2tmb3JtID0gamFz bWluZS5jcmVhdGVTcHlPYmooJ2JhY2tmb3JtJywgWydnZW5lcmF0ZVZpZXdTY2hlbWEnLCAnRGlh bG9nJ10pOworCisgICAgcm9vdE5vZGUgPSBwZ0Jyb3dzZXIudHJlZU1lbnUuYWRkTmV3Tm9kZSgn bGV2ZWwxJywge30sIFtdKTsKKyAgICBzZXJ2ZXJUcmVlTm9kZSA9IHBnQnJvd3Nlci50cmVlTWVu dS5hZGROZXdOb2RlKCdsZXZlbDEuMScsIHsKKyAgICAgIF90eXBlOiAnc2VydmVyJywKKyAgICAg IF9pZDogMTAsCisgICAgfSwgWydsZXZlbDEnXSk7CisgICAgZGF0YWJhc2VUcmVlTm9kZSA9IHBn QnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKAorICAgICAgJ2xldmVsMS4xLjEnLCB7CisgICAg ICAgIF90eXBlOiAnZGF0YWJhc2UnLAorICAgICAgICBfaWQ6IDExLAorICAgICAgICBsYWJlbDog J3NvbWVfZGF0YWJhc2UnLAorICAgICAgICBfbGFiZWw6ICdzb21lX2RhdGFiYXNlX2xhYmVsJywK KyAgICAgIH0sIFsnbGV2ZWwxJywgJ2xldmVsMS4xJ10pOworICAgIHBwYXNTZXJ2ZXJUcmVlTm9k ZSA9IHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdsZXZlbDEuMicsIHsKKyAgICAgIF90 eXBlOiAnc2VydmVyJywKKyAgICAgIHNlcnZlcl90eXBlOiAncHBhcycsCisgICAgfSwgWydsZXZl bDEnXSk7CisgICAgcGdCcm93c2VyLnRyZWVNZW51LmFkZE5ld05vZGUoJ2xldmVsMycsIHt9LCBb J2xldmVsMScsICdsZXZlbDEuMiddKTsKKyAgICBub0RhdGFOb2RlID0gcGdCcm93c2VyLnRyZWVN ZW51LmFkZE5ld05vZGUoCisgICAgICAnbGV2ZWwzLjEnLCB1bmRlZmluZWQsIFsnbGV2ZWwxJywg J2xldmVsMS4yJywgJ2xldmVsMyddKTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJyNkcmF3JywgKCkg PT4geworICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgYWxlcnRpZnlTcHkgPSBqYXNtaW5l LmNyZWF0ZVNweU9iaignYWxlcnRpZnknLCBbJ2FsZXJ0JywgJ2RpYWxvZyddKTsKKyAgICAgIGFs ZXJ0aWZ5U3B5WydiYWNrdXBfb2JqZWN0cyddID0gamFzbWluZS5jcmVhdGVTcHkoJ2JhY2t1cF9v YmplY3RzJyk7CisgICAgICBiYWNrdXBEaWFsb2cgPSBuZXcgQmFja3VwRGlhbG9nKAorICAgICAg ICBwZ0Jyb3dzZXIsCisgICAgICAgIGpxdWVyeVNweSwKKyAgICAgICAgYWxlcnRpZnlTcHksCisg ICAgICAgIGJhY2t1cE1vZGVsU3B5CisgICAgICApOworCisgICAgICBwZ0Jyb3dzZXIuZ2V0X3By ZWZlcmVuY2UgPSBqYXNtaW5lLmNyZWF0ZVNweSgnZ2V0X3ByZWZlcmVuY2VzJyk7CisgICAgfSk7 CisKKyAgICBjb250ZXh0KCd0aGVyZSBhcmUgbm8gYW5jZXN0b3JzIG9mIHRoZSB0eXBlIHNlcnZl cicsICgpID0+IHsKKyAgICAgIGl0KCdkb2VzIG5vdCBjcmVhdGUgYSBkaWFsb2cnLCAoKSA9PiB7 CisgICAgICAgIHBnQnJvd3Nlci50cmVlTWVudS5zZXRTZWxlY3RlZE5vZGUoW3Jvb3ROb2RlXSk7 CisgICAgICAgIGJhY2t1cERpYWxvZy5kcmF3KG51bGwsIG51bGwsIG51bGwpOworICAgICAgICBl eHBlY3QoYWxlcnRpZnlTcHlbJ2JhY2t1cF9vYmplY3RzJ10pLm5vdC50b0hhdmVCZWVuQ2FsbGVk KCk7CisgICAgICB9KTsKKworICAgICAgaXQoJ2Rpc3BsYXkgYW4gYWxlcnQgd2l0aCBhIEJhY2t1 cCBFcnJvcicsICgpID0+IHsKKyAgICAgICAgYmFja3VwRGlhbG9nLmRyYXcobnVsbCwgW3Jvb3RO b2RlXSwgbnVsbCk7CisgICAgICAgIGV4cGVjdChhbGVydGlmeVNweS5hbGVydCkudG9IYXZlQmVl bkNhbGxlZFdpdGgoCisgICAgICAgICAgJ0JhY2t1cCBFcnJvcicsCisgICAgICAgICAgJ1BsZWFz ZSBzZWxlY3Qgc2VydmVyIG9yIGNoaWxkIG5vZGUgZnJvbSB0aGUgYnJvd3NlciB0cmVlLicKKyAg ICAgICAgKTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgY29udGV4dCgndGhlcmUgaXMgYW4g YW5jZXN0b3Igb2YgdGhlIHR5cGUgc2VydmVyJywgKCkgPT4geworICAgICAgY29udGV4dCgnbm8g cHJlZmVyZW5jZSBjYW4gYmUgZm91bmQnLCAoKSA9PiB7CisgICAgICAgIGJlZm9yZUVhY2goKCkg PT4geworICAgICAgICAgIHBnQnJvd3Nlci5nZXRfcHJlZmVyZW5jZS5hbmQucmV0dXJuVmFsdWUo dW5kZWZpbmVkKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29udGV4dCgnc2VydmVyIGlzIGEg cHBhcyBzZXJ2ZXInLCAoKSA9PiB7CisgICAgICAgICAgaXQoJ2Rpc3BsYXkgYW4gYWxlcnQgd2l0 aCAiQmFja3VwIEVycm9yIicsICgpID0+IHsKKyAgICAgICAgICAgIGJhY2t1cERpYWxvZy5kcmF3 KG51bGwsIFtzZXJ2ZXJUcmVlTm9kZV0sIG51bGwpOworICAgICAgICAgICAgZXhwZWN0KGFsZXJ0 aWZ5U3B5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAgICAgJ0JhY2t1 cCBFcnJvcicsCisgICAgICAgICAgICAgICdGYWlsZWQgdG8gbG9hZCBwcmVmZXJlbmNlIHBnX2Jp bl9kaXIgb2YgbW9kdWxlIHBhdGhzJworICAgICAgICAgICAgKTsKKyAgICAgICAgICB9KTsKKyAg ICAgICAgfSk7CisKKyAgICAgICAgY29udGV4dCgnc2VydmVyIGlzIG5vdCBhIHBwYXMgc2VydmVy JywgKCkgPT4geworICAgICAgICAgIGl0KCdkaXNwbGF5IGFuIGFsZXJ0IHdpdGggIkJhY2t1cCBF cnJvciInLCAoKSA9PiB7CisgICAgICAgICAgICBiYWNrdXBEaWFsb2cuZHJhdyhudWxsLCBbcHBh c1NlcnZlclRyZWVOb2RlXSwgbnVsbCk7CisgICAgICAgICAgICBleHBlY3QoYWxlcnRpZnlTcHku YWxlcnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAgICAgICAnQmFja3VwIEVycm9y JywKKyAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBsb2FkIHByZWZlcmVuY2UgcHBhc19iaW5fZGly IG9mIG1vZHVsZSBwYXRocycKKyAgICAgICAgICAgICk7CisgICAgICAgICAgfSk7CisgICAgICAg IH0pOworICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3ByZWZlcmVuY2UgY2FuIGJlIGZvdW5k JywgKCkgPT4geworICAgICAgICBjb250ZXh0KCdiaW5hcnkgZm9sZGVyIGlzIG5vdCBjb25maWd1 cmVkJywgKCkgPT4geworICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICAgICAg cGdCcm93c2VyLmdldF9wcmVmZXJlbmNlLmFuZC5yZXR1cm5WYWx1ZSh7fSk7CisgICAgICAgICAg fSk7CisKKyAgICAgICAgICBjb250ZXh0KCdzZXJ2ZXIgaXMgYSBwcGFzIHNlcnZlcicsICgpID0+ IHsKKyAgICAgICAgICAgIGl0KCdkaXNwbGF5IGFuIGFsZXJ0IHdpdGggIkNvbmZpZ3VyYXRpb24g cmVxdWlyZWQiJywgKCkgPT4geworICAgICAgICAgICAgICBiYWNrdXBEaWFsb2cuZHJhdyhudWxs LCBbc2VydmVyVHJlZU5vZGVdLCBudWxsKTsKKyAgICAgICAgICAgICAgZXhwZWN0KGFsZXJ0aWZ5 U3B5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAgICAgICAnQ29uZmln dXJhdGlvbiByZXF1aXJlZCcsCisgICAgICAgICAgICAgICAgJ1BsZWFzZSBjb25maWd1cmUgdGhl IFBvc3RncmVTUUwgQmluYXJ5IFBhdGggaW4gdGhlIFByZWZlcmVuY2VzIGRpYWxvZy4nCisgICAg ICAgICAgICAgICk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAg IGNvbnRleHQoJ3NlcnZlciBpcyBub3QgYSBwcGFzIHNlcnZlcicsICgpID0+IHsKKyAgICAgICAg ICAgIGl0KCdkaXNwbGF5IGFuIGFsZXJ0IHdpdGggIkNvbmZpZ3VyYXRpb24gcmVxdWlyZWQiJywg KCkgPT4geworICAgICAgICAgICAgICBiYWNrdXBEaWFsb2cuZHJhdyhudWxsLCBbcHBhc1NlcnZl clRyZWVOb2RlXSwgbnVsbCk7CisgICAgICAgICAgICAgIGV4cGVjdChhbGVydGlmeVNweS5hbGVy dCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAgICAgICAgICAgJ0NvbmZpZ3VyYXRpb24g cmVxdWlyZWQnLAorICAgICAgICAgICAgICAgICdQbGVhc2UgY29uZmlndXJlIHRoZSBFREIgQWR2 YW5jZWQgU2VydmVyIEJpbmFyeSBQYXRoIGluIHRoZSBQcmVmZXJlbmNlcyBkaWFsb2cuJworICAg ICAgICAgICAgICApOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0p OworCisgICAgICAgIGNvbnRleHQoJ2JpbmFyeSBmb2xkZXIgaXMgY29uZmlndXJlZCcsICgpID0+ IHsKKyAgICAgICAgICBsZXQgYmFja3VwRGlhbG9nUmVzaXplVG9TcHk7CisgICAgICAgICAgbGV0 IHNlcnZlclJlc2l6ZVRvU3B5OworICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAg ICAgICAgYmFja3VwRGlhbG9nUmVzaXplVG9TcHkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignYmFj a3VwRGlhbG9nUmVzaXplVG9TcHknLCBbJ3Jlc2l6ZVRvJ10pOworICAgICAgICAgICAgYWxlcnRp ZnlTcHlbJ2JhY2t1cF9vYmplY3RzJ10uYW5kCisgICAgICAgICAgICAgIC5yZXR1cm5WYWx1ZShi YWNrdXBEaWFsb2dSZXNpemVUb1NweSk7CisgICAgICAgICAgICBwZ0Jyb3dzZXIuZ2V0X3ByZWZl cmVuY2UuYW5kLnJldHVyblZhbHVlKHt2YWx1ZTogJy9zb21lL3BhdGgnfSk7CisgICAgICAgICAg fSk7CisKKyAgICAgICAgICBpdCgnZGlzcGxheXMgdGhlIGRpYWxvZycsICgpID0+IHsKKyAgICAg ICAgICAgIGJhY2t1cERpYWxvZy5kcmF3KG51bGwsIFtzZXJ2ZXJUcmVlTm9kZV0sIG51bGwpOwor ICAgICAgICAgICAgZXhwZWN0KGFsZXJ0aWZ5U3B5WydiYWNrdXBfb2JqZWN0cyddKS50b0hhdmVC ZWVuQ2FsbGVkV2l0aCh0cnVlKTsKKyAgICAgICAgICAgIGV4cGVjdChiYWNrdXBEaWFsb2dSZXNp emVUb1NweS5yZXNpemVUbykudG9IYXZlQmVlbkNhbGxlZFdpdGgoJzYwJScsICc1MCUnKTsKKyAg ICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7CisKKyAg ZGVzY3JpYmUoJyNkaWFsb2dGYWN0b3J5JywgKCkgPT4geworICAgIGRlc2NyaWJlKCcjcHJlcGFy ZScsICgpID0+IHsKKyAgICAgIGxldCBiYWNrdXBKUXVlcnlDb250YWluZXI7CisgICAgICBsZXQg dmlld1NjaGVtYTsKKyAgICAgIGxldCBnZW5lcmF0ZWRCYWNrdXBNb2RlbDsKKyAgICAgIGxldCBi YWNrdXBOb2RlQ2hpbGROb2RlOworICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgIGJh Y2t1cEpRdWVyeUNvbnRhaW5lciA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCdiYWNrdXBKUXVlcnlD b250YWluZXInLCBbJ2dldCddKTsKKyAgICAgICAgYmFja3VwSlF1ZXJ5Q29udGFpbmVyLmdldC5h bmQucmV0dXJuVmFsdWUoYmFja3VwSlF1ZXJ5Q29udGFpbmVyKTsKKyAgICAgICAgdmlld1NjaGVt YSA9IHt9OworICAgICAgICBnZW5lcmF0ZWRCYWNrdXBNb2RlbCA9IHt9OworICAgICAgICBiYWNr dXBOb2RlLl9faW50ZXJuYWwgPSB7CisgICAgICAgICAgYnV0dG9uczogWworICAgICAgICAgICAg e30sIHt9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlbGVtZW50OiB7CisgICAgICAg ICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLAorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgICAgXQorICAgICAgICB9OworICAgICAgICBiYWNrdXBOb2RlLmVsZW1lbnRzID0g eworICAgICAgICAgIGJvZHk6IHsKKyAgICAgICAgICAgIGNoaWxkTm9kZXM6IFsKKyAgICAgICAg ICAgICAge30KKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9LAorICAgICAgICAgIGNvbnRlbnQ6 IGphc21pbmUuY3JlYXRlU3B5T2JqKCdjb250ZW50JywgWydhcHBlbmRDaGlsZCddKSwKKyAgICAg ICAgfTsKKworICAgICAgICBiYWNrZm9ybS5nZW5lcmF0ZVZpZXdTY2hlbWEuYW5kLnJldHVyblZh bHVlKHZpZXdTY2hlbWEpOworICAgICAgICBiYWNrdXBNb2RlbFNweS5hbmQucmV0dXJuVmFsdWUo Z2VuZXJhdGVkQmFja3VwTW9kZWwpOworCisgICAgICAgIGJhY2t1cERpYWxvZyA9IG5ldyBCYWNr dXBEaWFsb2coCisgICAgICAgICAgcGdCcm93c2VyLAorICAgICAgICAgIGpxdWVyeVNweSwKKyAg ICAgICAgICBhbGVydGlmeVNweSwKKyAgICAgICAgICBiYWNrdXBNb2RlbFNweSwKKyAgICAgICAg ICBiYWNrZm9ybQorICAgICAgICApOworCisgICAgICAgIGJhY2t1cE5vZGVDaGlsZE5vZGUgPSBq YXNtaW5lLmNyZWF0ZVNweU9iaignc29tZXRoaW5nJywgWydhZGRDbGFzcyddKTsKKworICAgICAg ICBqcXVlcnlTcHkuYW5kLmNhbGxGYWtlKChzZWxlY3RvcikgPT4geworICAgICAgICAgIGlmIChz ZWxlY3RvciA9PT0gJzxkaXYgY2xhc3M9XCdiYWNrdXBfZGlhbG9nXCc+PC9kaXY+JykgeworICAg ICAgICAgICAgcmV0dXJuIGJhY2t1cEpRdWVyeUNvbnRhaW5lcjsKKyAgICAgICAgICB9IGVsc2Ug aWYgKHNlbGVjdG9yID09PSBiYWNrdXBOb2RlLmVsZW1lbnRzLmJvZHkuY2hpbGROb2Rlc1swXSkg eworICAgICAgICAgICAgcmV0dXJuIGJhY2t1cE5vZGVDaGlsZE5vZGU7CisgICAgICAgICAgfQor ICAgICAgICB9KQorICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3NlbGVjdGVkIHRyZWUgbm9k ZSBoYXMgbm8gZGF0YScsICgpID0+IHsKKyAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAg ICAgICAgcGdCcm93c2VyLnRyZWVNZW51LnNldFNlbGVjdGVkTm9kZShbbm9EYXRhTm9kZV0pOwor ICAgICAgICAgIGNvbnN0IGRpYWxvZyA9IGJhY2t1cERpYWxvZy5kaWFsb2dGYWN0b3J5KG51bGws ICdiYWNrdXBfb2JqZWN0cycpOworICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGlhbG9nLCBiYWNr dXBOb2RlKS5wcmVwYXJlKCk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdkb2VzIG5vdCBj cmVhdGUgYSBiYWNrZm9ybSBkaWFsb2cnLCAoKSA9PiB7CisgICAgICAgICAgZXhwZWN0KGJhY2tm b3JtLkRpYWxvZykubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCk7CisgICAgICAgIH0pOworCisg ICAgICAgIGl0KCdkaXNhYmxlcyB0aGUgYnV0dG9uIHN1Ym1pdCBidXR0b24gdW50aWwgYSBmaWxl bmFtZSBpcyBzZWxlY3RlZCcsICgpID0+IHsKKyAgICAgICAgICBleHBlY3QoYmFja3VwTm9kZS5f X2ludGVybmFsLmJ1dHRvbnNbMl0uZWxlbWVudC5kaXNhYmxlZCkudG9CZSh0cnVlKTsKKyAgICAg ICAgfSk7CisgICAgICB9KTsKKworICAgICAgY29udGV4dCgnbm8gdHJlZSBlbGVtZW50IGlzIHNl bGVjdGVkJywgKCkgPT4geworICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgICBj b25zdCBkaWFsb2cgPSBiYWNrdXBEaWFsb2cuZGlhbG9nRmFjdG9yeShudWxsLCAnYmFja3VwX29i amVjdHMnKTsKKyAgICAgICAgICBPYmplY3QuYXNzaWduKGRpYWxvZywgYmFja3VwTm9kZSkucHJl cGFyZSgpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEgYmFj a2Zvcm0gZGlhbG9nJywgKCkgPT4geworICAgICAgICAgIGV4cGVjdChiYWNrZm9ybS5EaWFsb2cp Lm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aCgpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgn ZGlzYWJsZXMgdGhlIGJ1dHRvbiBzdWJtaXQgYnV0dG9uIHVudGlsIGEgZmlsZW5hbWUgaXMgc2Vs ZWN0ZWQnLCAoKSA9PiB7CisgICAgICAgICAgZXhwZWN0KGJhY2t1cE5vZGUuX19pbnRlcm5hbC5i dXR0b25zWzJdLmVsZW1lbnQuZGlzYWJsZWQpLnRvQmUodHJ1ZSk7CisgICAgICAgIH0pOworICAg ICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3RyZWUgZWxlbWVudCBpcyBzZWxlY3RlZCcsICgpID0+ IHsKKyAgICAgICAgbGV0IHRyZWVIaWVyYXJjaHlJbmZvcm1hdGlvbjsKKyAgICAgICAgbGV0IGRp YWxvZ1NweTsKKyAgICAgICAgbGV0IGRpYWxvZzsKKyAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7 CisgICAgICAgICAgdHJlZUhpZXJhcmNoeUluZm9ybWF0aW9uID0geworICAgICAgICAgICAgZGF0 YWJhc2U6IHsKKyAgICAgICAgICAgICAgX3R5cGU6ICdkYXRhYmFzZScsCisgICAgICAgICAgICAg IF9pZDogMTEsCisgICAgICAgICAgICAgIGxhYmVsOiAnc29tZV9kYXRhYmFzZScsCisgICAgICAg ICAgICAgIF9sYWJlbDogJ3NvbWVfZGF0YWJhc2VfbGFiZWwnLAorICAgICAgICAgICAgICBwcmlv cml0eTogMCwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzZXJ2ZXI6IHsKKyAgICAgICAg ICAgICAgX3R5cGU6ICdzZXJ2ZXInLAorICAgICAgICAgICAgICBfaWQ6IDEwLAorICAgICAgICAg ICAgICBwcmlvcml0eTogLTEsCisgICAgICAgICAgICB9CisgICAgICAgICAgfTsKKyAgICAgICAg ICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2V0U2VsZWN0ZWROb2RlKFt7aWQ6ICdsZXZlbDEuMS4xJ31d KTsKKyAgICAgICAgICBwZ0Jyb3dzZXIuTm9kZXNbJ2RhdGFiYXNlJ10uZ2V0VHJlZU5vZGVIaWVy YXJjaHkuYW5kCisgICAgICAgICAgICAucmV0dXJuVmFsdWUodHJlZUhpZXJhcmNoeUluZm9ybWF0 aW9uKTsKKyAgICAgICAgICBkaWFsb2dTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignbmV3Vmll dycsIFsncmVuZGVyJ10pOworICAgICAgICAgIGRpYWxvZ1NweS4kZWwgPSBqYXNtaW5lLmNyZWF0 ZVNweU9iaignJGVsJywgWydmaW5kJ10pOworICAgICAgICAgIGRpYWxvZ1NweS5tb2RlbCA9IGph c21pbmUuY3JlYXRlU3B5T2JqKCdtb2RlbCcsIFsnb24nXSkKKyAgICAgICAgICBkaWFsb2dTcHku JGVsLmZpbmQuYW5kLnJldHVyblZhbHVlKFtdKTsKKworICAgICAgICAgIGJhY2tmb3JtLkRpYWxv Zy5hbmQucmV0dXJuVmFsdWUoZGlhbG9nU3B5KTsKKworICAgICAgICAgIGRpYWxvZyA9IGJhY2t1 cERpYWxvZy5kaWFsb2dGYWN0b3J5KG51bGwsICdiYWNrdXBfb2JqZWN0cycpOworICAgICAgICAg IGRpYWxvZy5zZXQgPSBqYXNtaW5lLmNyZWF0ZVNweSgnZGlhbG9nLnNldCcpOworICAgICAgICAg IE9iamVjdC5hc3NpZ24oZGlhbG9nLCBiYWNrdXBOb2RlKS5wcmVwYXJlKCk7CisgICAgICAgIH0p OworCisgICAgICAgIGl0KCdjcmVhdGVzIGEgYmFja2Zvcm0gZGlhbG9nIGFuZCBkaXNwbGF5cyBp dCcsICgpID0+IHsKKyAgICAgICAgICBleHBlY3QoYmFja2Zvcm0uRGlhbG9nKS50b0hhdmVCZWVu Q2FsbGVkV2l0aCh7CisgICAgICAgICAgICBlbDogYmFja3VwSlF1ZXJ5Q29udGFpbmVyLAorICAg ICAgICAgICAgbW9kZWw6IGdlbmVyYXRlZEJhY2t1cE1vZGVsLAorICAgICAgICAgICAgc2NoZW1h OiB2aWV3U2NoZW1hLAorICAgICAgICAgIH0pOworCisgICAgICAgICAgZXhwZWN0KGRpYWxvZ1Nw eS5yZW5kZXIpLnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQo J2FkZCBhbGVydGlmeSBjbGFzc2VzIHRvIGJhY2t1cCBub2RlIGNoaWxkbm9kZScsICgpID0+IHsK KyAgICAgICAgICBleHBlY3QoYmFja3VwTm9kZUNoaWxkTm9kZS5hZGRDbGFzcykKKyAgICAgICAg ICAgIC50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnYWxlcnRpZnlfdG9vbHNfZGlhbG9nX3Byb3BlcnRp ZXMgb2JqX3Byb3BlcnRpZXMnKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ2Rpc2FibGVz IHRoZSBidXR0b24gc3VibWl0IGJ1dHRvbiB1bnRpbCBhIGZpbGVuYW1lIGlzIHNlbGVjdGVkJywg KCkgPT4geworICAgICAgICAgIGV4cGVjdChiYWNrdXBOb2RlLl9faW50ZXJuYWwuYnV0dG9uc1sy XS5lbGVtZW50LmRpc2FibGVkKS50b0JlKHRydWUpOworICAgICAgICB9KTsKKworICAgICAgICBp dCgnZ2VuZXJhdGVzIGEgbmV3IGJhY2t1cCBtb2RlbCcsICgpID0+IHsKKyAgICAgICAgICBleHBl Y3QoYmFja3VwTW9kZWxTcHkpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAgICAge30s CisgICAgICAgICAgICB7bm9kZV9pbmZvOiB0cmVlSGllcmFyY2h5SW5mb3JtYXRpb259CisgICAg ICAgICAgKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ2FkZCB0aGUgbmV3IGRpYWxvZyB0 byB0aGUgYmFja3VwIG5vZGUgSFRNTCcsICgpID0+IHsKKyAgICAgICAgICBleHBlY3QoYmFja3Vw Tm9kZS5lbGVtZW50cy5jb250ZW50LmFwcGVuZENoaWxkKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChi YWNrdXBKUXVlcnlDb250YWluZXIpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2V0cyB0 aGUgdGl0bGUgdG8gIkJhY2t1cCAoZGF0YWJhc2U6IHNvbWVfZGF0YWJhc2UpIicsICgpID0+IHsK KyAgICAgICAgICBleHBlY3QoZGlhbG9nLnNldCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3RpdGxl JywgJ0JhY2t1cCAoZGF0YWJhc2U6IHNvbWVfZGF0YWJhc2UpJyk7CisgICAgICAgIH0pOworICAg ICAgfSk7CisgICAgfSk7CisKKyAgICBkZXNjcmliZSgnI29uQnV0dG9uQ2xpY2tlZCcsICgpID0+ IHsKKyAgICAgIGxldCBiYWNrdXBKUXVlcnlDb250YWluZXI7CisgICAgICBsZXQgYmFja3VwTm9k ZUNoaWxkTm9kZTsKKyAgICAgIGxldCBkaWFsb2c7CisgICAgICBsZXQgbmV0d29ya01vY2s7CisK KyAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICBuZXR3b3JrTW9jayA9IG5ldyBNb2Nr QWRhcHRlcihheGlvcyk7CisgICAgICAgIGJhY2t1cEpRdWVyeUNvbnRhaW5lciA9IGphc21pbmUu Y3JlYXRlU3B5T2JqKCdiYWNrdXBKUXVlcnlDb250YWluZXInLCBbJ2dldCddKTsKKyAgICAgICAg YmFja3VwSlF1ZXJ5Q29udGFpbmVyLmdldC5hbmQucmV0dXJuVmFsdWUoYmFja3VwSlF1ZXJ5Q29u dGFpbmVyKTsKKyAgICAgICAgcGdCcm93c2VyLnNob3dIZWxwID0gamFzbWluZS5jcmVhdGVTcHko J3Nob3dIZWxwJyk7CisgICAgICAgIGFsZXJ0aWZ5U3B5ID0gamFzbWluZS5jcmVhdGVTcHlPYmoo J2FsZXJ0aWZ5JywgWydzdWNjZXNzJywgJ2FsZXJ0J10pOworCisgICAgICAgIGJhY2t1cERpYWxv ZyA9IG5ldyBCYWNrdXBEaWFsb2coCisgICAgICAgICAgcGdCcm93c2VyLAorICAgICAgICAgIGpx dWVyeVNweSwKKyAgICAgICAgICBhbGVydGlmeVNweSwKKyAgICAgICAgICBiYWNrdXBNb2RlbFNw eSwKKyAgICAgICAgICBiYWNrZm9ybQorICAgICAgICApOworCisgICAgICAgIGJhY2t1cE5vZGVD aGlsZE5vZGUgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignc29tZXRoaW5nJywgWydhZGRDbGFzcydd KTsKKworICAgICAgICBkaWFsb2cgPSBPYmplY3QuYXNzaWduKAorICAgICAgICAgIGJhY2t1cERp YWxvZy5kaWFsb2dGYWN0b3J5KG51bGwsICdiYWNrdXBfb2JqZWN0cycpLAorICAgICAgICAgIGJh Y2t1cE5vZGUKKyAgICAgICAgKTsKKyAgICAgIH0pOworCisgICAgICBhZnRlckVhY2goKCkgPT4g eworICAgICAgICBuZXR3b3JrTW9jay5yZXN0b3JlKCk7CisgICAgICB9KTsKKworICAgICAgY29u dGV4dCgnZGlhbG9nIGhlbHAgYnV0dG9uIHdhcyBwcmVzc2VkJywgKCkgPT4geworICAgICAgICBs ZXQgbmV0d29ya0NhbGxlZDsKKyAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgICAg cGdCcm93c2VyLnRyZWVNZW51LnNldFNlbGVjdGVkTm9kZShbe2lkOiAnbGV2ZWwxLjEuMSd9XSk7 CisgICAgICAgICAgbmV0d29ya0NhbGxlZCA9IGZhbHNlOworICAgICAgICAgIG5ldHdvcmtNb2Nr Lm9uQW55KC8uKy8pLnJlcGx5KCgpID0+IHsKKyAgICAgICAgICAgIG5ldHdvcmtDYWxsZWQgPSB0 cnVlOworICAgICAgICAgICAgcmV0dXJuIFsyMDAsIHt9XTsKKyAgICAgICAgICB9KTsKKworICAg ICAgICAgIGNvbnN0IGV2ZW50ID0geworICAgICAgICAgICAgYnV0dG9uOiB7CisgICAgICAgICAg ICAgIGVsZW1lbnQ6IHsKKyAgICAgICAgICAgICAgICBuYW1lOiAnZGlhbG9nX2hlbHAnLAorICAg ICAgICAgICAgICAgIGdldEF0dHJpYnV0ZTogKGF0dHJpYnV0ZU5hbWUpID0+IHsKKyAgICAgICAg ICAgICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09PSAndXJsJykgeworICAgICAgICAgICAgICAg ICAgICByZXR1cm4gJ2h0dHA6Ly9zb21ldXJsJzsKKyAgICAgICAgICAgICAgICAgIH0gZWxzZSBp ZiAoYXR0cmlidXRlTmFtZSA9PT0gJ2xhYmVsJykgeworICAgICAgICAgICAgICAgICAgICByZXR1 cm4gJ3NvbWUgbGFiZWwnOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH07CisgICAgICAgICAg ZGlhbG9nLmNhbGxiYWNrKGV2ZW50KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ2Rpc3Bs YXlzIGhlbHAgZm9yIGRpYWxvZycsICgpID0+IHsKKyAgICAgICAgICBleHBlY3QocGdCcm93c2Vy LnNob3dIZWxwKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAgICdkaWFsb2dfaGVs cCcsCisgICAgICAgICAgICAnaHR0cDovL3NvbWV1cmwnLAorICAgICAgICAgICAgcGdCcm93c2Vy Lk5vZGVzWydkYXRhYmFzZSddLAorICAgICAgICAgICAgZGF0YWJhc2VUcmVlTm9kZSwKKyAgICAg ICAgICAgICdzb21lIGxhYmVsJworICAgICAgICAgICkKKyAgICAgICAgfSk7CisKKyAgICAgICAg aXQoJ2RvZXMgbm90IHN0YXJ0IHRoZSBiYWNrdXAnLCAoKSA9PiB7CisgICAgICAgICAgZXhwZWN0 KG5ldHdvcmtDYWxsZWQpLnRvQmUoZmFsc2UpOworICAgICAgICB9KTsKKyAgICAgIH0pOworCisg ICAgICBjb250ZXh0KCdvYmplY3QgaGVscCBidXR0b24gd2FzIHByZXNzZWQnLCAoKSA9PiB7Cisg ICAgICAgIGxldCBuZXR3b3JrQ2FsbGVkOworICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAg ICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2V0U2VsZWN0ZWROb2RlKFt7aWQ6ICdsZXZlbDEu MS4xJ31dKTsKKyAgICAgICAgICBuZXR3b3JrQ2FsbGVkID0gZmFsc2U7CisgICAgICAgICAgbmV0 d29ya01vY2sub25BbnkoLy4rLykucmVwbHkoKCkgPT4geworICAgICAgICAgICAgbmV0d29ya0Nh bGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gWzIwMCwge31dOworICAgICAgICAgIH0p OworCisgICAgICAgICAgY29uc3QgZXZlbnQgPSB7CisgICAgICAgICAgICBidXR0b246IHsKKyAg ICAgICAgICAgICAgZWxlbWVudDogeworICAgICAgICAgICAgICAgIG5hbWU6ICdvYmplY3RfaGVs cCcsCisgICAgICAgICAgICAgICAgZ2V0QXR0cmlidXRlOiAoYXR0cmlidXRlTmFtZSkgPT4gewor ICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT09ICd1cmwnKSB7CisgICAgICAg ICAgICAgICAgICAgIHJldHVybiAnaHR0cDovL3NvbWV1cmwnOworICAgICAgICAgICAgICAgICAg fSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lID09PSAnbGFiZWwnKSB7CisgICAgICAgICAgICAgICAg ICAgIHJldHVybiAnc29tZSBsYWJlbCc7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfTsKKyAg ICAgICAgICBkaWFsb2cuY2FsbGJhY2soZXZlbnQpOworICAgICAgICB9KTsKKworICAgICAgICBp dCgnZGlzcGxheXMgaGVscCBmb3IgZGlhbG9nJywgKCkgPT4geworICAgICAgICAgIGV4cGVjdChw Z0Jyb3dzZXIuc2hvd0hlbHApLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAgICAgJ29i amVjdF9oZWxwJywKKyAgICAgICAgICAgICdodHRwOi8vc29tZXVybCcsCisgICAgICAgICAgICBw Z0Jyb3dzZXIuTm9kZXNbJ2RhdGFiYXNlJ10sCisgICAgICAgICAgICBkYXRhYmFzZVRyZWVOb2Rl LAorICAgICAgICAgICAgJ3NvbWUgbGFiZWwnCisgICAgICAgICAgKQorICAgICAgICB9KTsKKwor ICAgICAgICBpdCgnZG9lcyBub3Qgc3RhcnQgdGhlIGJhY2t1cCcsICgpID0+IHsKKyAgICAgICAg ICBleHBlY3QobmV0d29ya0NhbGxlZCkudG9CZShmYWxzZSk7CisgICAgICAgIH0pOworICAgICAg fSk7CisKKyAgICAgIGNvbnRleHQoJ2JhY2t1cCBidXR0b24gd2FzIHByZXNzZWQnLCAoKSA9PiB7 CisgICAgICAgIGNvbnRleHQoJ25vIHRyZWUgbm9kZSBpcyBzZWxlY3RlZCcsICgpID0+IHsKKyAg ICAgICAgICBsZXQgbmV0d29ya0NhbGxlZDsKKyAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsK KyAgICAgICAgICAgIG5ldHdvcmtDYWxsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG5ldHdvcmtN b2NrLm9uUG9zdCgnL2JhY2t1cC9qb2IvMTAvb2JqZWN0JykucmVwbHkoKCkgPT4geworICAgICAg ICAgICAgICBuZXR3b3JrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgcmV0dXJuIFsyMDAs IHt9XTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBjb25zdCBldmVudCA9IHsKKyAg ICAgICAgICAgICAgYnV0dG9uOiB7CisgICAgICAgICAgICAgICAgJ2RhdGEtYnRuLW5hbWUnOiAn YmFja3VwJywKKyAgICAgICAgICAgICAgICBlbGVtZW50OiB7CisgICAgICAgICAgICAgICAgICBn ZXRBdHRyaWJ1dGU6IChhdHRyaWJ1dGVOYW1lKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGlm IChhdHRyaWJ1dGVOYW1lID09PSAndXJsJykgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVy biAnaHR0cDovL3NvbWV1cmwnOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJp YnV0ZU5hbWUgPT09ICdsYWJlbCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3Nv bWUgbGFiZWwnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAg ICAgICAgZGlhbG9nLmNhbGxiYWNrKGV2ZW50KTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAg IGl0KCdkb2VzIG5vdCBzdGFydCB0aGUgYmFja3VwJywgKCkgPT4geworICAgICAgICAgICAgZXhw ZWN0KG5ldHdvcmtDYWxsZWQpLnRvQmUoZmFsc2UpOworICAgICAgICAgIH0pOworICAgICAgICB9 KTsKKworICAgICAgICBjb250ZXh0KCdzZWxlY3RlZCBub2RlIGhhcyBubyBkYXRhJywgKCkgPT4g eworICAgICAgICAgIGxldCBuZXR3b3JrQ2FsbGVkOworICAgICAgICAgIGJlZm9yZUVhY2goKCkg PT4geworICAgICAgICAgICAgcGdCcm93c2VyLnRyZWVNZW51LnNldFNlbGVjdGVkTm9kZShbbm9E YXRhTm9kZV0pOworICAgICAgICAgICAgbmV0d29ya0NhbGxlZCA9IGZhbHNlOworICAgICAgICAg ICAgbmV0d29ya01vY2sub25Qb3N0KCcvYmFja3VwL2pvYi8xMC9vYmplY3QnKS5yZXBseSgoKSA9 PiB7CisgICAgICAgICAgICAgIG5ldHdvcmtDYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgICBy ZXR1cm4gWzIwMCwge31dOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGNvbnN0IGV2 ZW50ID0geworICAgICAgICAgICAgICBidXR0b246IHsKKyAgICAgICAgICAgICAgICAnZGF0YS1i dG4tbmFtZSc6ICdiYWNrdXAnLAorICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHsKKyAgICAgICAg ICAgICAgICAgIGdldEF0dHJpYnV0ZTogKGF0dHJpYnV0ZU5hbWUpID0+IHsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT09ICd1cmwnKSB7CisgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuICdodHRwOi8vc29tZXVybCc7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAoYXR0cmlidXRlTmFtZSA9PT0gJ2xhYmVsJykgeworICAgICAgICAgICAgICAgICAgICAg IHJldHVybiAnc29tZSBsYWJlbCc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH07CisgICAgICAgICAgICBkaWFsb2cuY2FsbGJhY2soZXZlbnQpOworICAgICAgICAgIH0pOwor CisgICAgICAgICAgaXQoJ2RvZXMgbm90IHN0YXJ0IHRoZSBiYWNrdXAnLCAoKSA9PiB7CisgICAg ICAgICAgICBleHBlY3QobmV0d29ya0NhbGxlZCkudG9CZShmYWxzZSk7CisgICAgICAgICAgfSk7 CisgICAgICAgIH0pOworCisgICAgICAgIGNvbnRleHQoJ3NlbGVjdGVkIG5vZGUgaGFzIGRhdGEn LCAoKSA9PiB7CisgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgICAgICBwZ0Jy b3dzZXIudHJlZU1lbnUuc2V0U2VsZWN0ZWROb2RlKFt7aWQ6ICdsZXZlbDEuMS4xJ31dKTsKKyAg ICAgICAgICAgIHBnQnJvd3Nlci5FdmVudHMgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignRXZlbnRz JywgWyd0cmlnZ2VyJ10pOworCisgICAgICAgICAgICBiYWNrdXBOb2RlLnZpZXcgPSB7CisgICAg ICAgICAgICAgIG1vZGVsOiBuZXcgRmFrZU1vZGVsKCksCisgICAgICAgICAgICB9OworICAgICAg ICAgICAgYmFja3VwTm9kZS52aWV3Lm1vZGVsLnNldCgnZHFvdXRlJywgZmFsc2UpOworICAgICAg ICAgICAgYmFja3VwTm9kZS52aWV3Lm1vZGVsLnNldCgnZmlsZScsICd0ZXN0Jyk7CisgICAgICAg ICAgICBiYWNrdXBOb2RlLnZpZXcubW9kZWwuc2V0KCd2ZXJib3NlJywgdHJ1ZSk7CisKKyAgICAg ICAgICAgIGNvbnN0IGV2ZW50ID0geworICAgICAgICAgICAgICBidXR0b246IHsKKyAgICAgICAg ICAgICAgICAnZGF0YS1idG4tbmFtZSc6ICdiYWNrdXAnLAorICAgICAgICAgICAgICAgIGVsZW1l bnQ6IHsKKyAgICAgICAgICAgICAgICAgIGdldEF0dHJpYnV0ZTogKGF0dHJpYnV0ZU5hbWUpID0+ IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT09ICd1cmwnKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRwOi8vc29tZXVybCc7CisgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PT0gJ2xhYmVsJykgeworICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAnc29tZSBsYWJlbCc7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBPYmplY3QuYXNzaWduKGRpYWxvZywgYmFj a3VwTm9kZSkuY2FsbGJhY2soZXZlbnQpOworICAgICAgICAgIH0pOworICAgICAgICAgIGNvbnRl eHQoJ2NyZWF0aW9uIG9mIGJhY2t1cCBqb2Igc3VjY2Vzc2Z1bGwnLCAoKSA9PiB7CisgICAgICAg ICAgICBsZXQgZGF0YVNlbnRUb1NlcnZlcjsKKyAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4g eworICAgICAgICAgICAgICBuZXR3b3JrTW9jay5vblBvc3QoJy9iYWNrdXAvam9iLzEwL29iamVj dCcpLnJlcGx5KChyZXF1ZXN0KSA9PiB7CisgICAgICAgICAgICAgICAgZGF0YVNlbnRUb1NlcnZl ciA9IHJlcXVlc3QuZGF0YTsKKyAgICAgICAgICAgICAgICByZXR1cm4gWzIwMCwge31dOworICAg ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpdCgnY3JlYXRl cyBhbiBzdWNjZXNzIGFsZXJ0IGJveCcsIChkb25lKSA9PiB7CisgICAgICAgICAgICAgIHNldFRp bWVvdXQoKCkgPT4geworICAgICAgICAgICAgICAgIGV4cGVjdChhbGVydGlmeVNweS5zdWNjZXNz KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnQmFja3VwIGpvYicgKworICAgICAgICAgICAgICAgICAg JyBjcmVhdGVkLicsIDUpOworICAgICAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICAgICAg fSwgMCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaXQoJ3RyaWdnZXIgYmFja2dy b3VuZCBwcm9jZXNzJywgKGRvbmUpID0+IHsKKyAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9 PiB7CisgICAgICAgICAgICAgICAgZXhwZWN0KHBnQnJvd3Nlci5FdmVudHMudHJpZ2dlcikudG9I YXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAgICAgICAgICAgICAncGdhZG1pbi1iZ3Byb2Nlc3M6 Y3JlYXRlZCcsCisgICAgICAgICAgICAgICAgICBqYXNtaW5lLmFueXRoaW5nKCkKKyAgICAgICAg ICAgICAgICApOworICAgICAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICAgICAgfSwgMCk7 CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaXQoJ3NlbmQgY29ycmVjdCBkYXRhIHRv IHNlcnZlcicsICgpID0+IHsKKyAgICAgICAgICAgICAgZXhwZWN0KGRhdGFTZW50VG9TZXJ2ZXIp LnRvRXF1YWwoSlNPTi5zdHJpbmdpZnkoeworICAgICAgICAgICAgICAgIGRxb3V0ZTogZmFsc2Us CisgICAgICAgICAgICAgICAgZmlsZTogJ3Rlc3QnLAorICAgICAgICAgICAgICAgIHZlcmJvc2U6 IHRydWUsCisgICAgICAgICAgICAgICAgZGF0YWJhc2U6ICdzb21lX2RhdGFiYXNlX2xhYmVsJwor ICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9KTsKKworICAg ICAgICAgIGNvbnRleHQoJ2Vycm9yIGNyZWF0aW5nIGJhY2t1cCBqb2InLCAoKSA9PiB7CisgICAg ICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2Ug PSB7CisgICAgICAgICAgICAgICAgZXJyb3Jtc2c6ICdzb21lIGVycm9yIG1lc3NhZ2UnCisgICAg ICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgbmV0d29ya01vY2sub25Qb3N0KCcvYmFja3Vw L2pvYi8xMC9vYmplY3QnKS5yZXBseSgoKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFs1 MDAsIHJlc3BvbnNlXTsKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAg ICAgICAgICAgaXQoJ2NyZWF0ZXMgYW4gYWxlcnQgYm94JywgKGRvbmUpID0+IHsKKyAgICAgICAg ICAgICAgc2V0VGltZW91dCgoKSA9PiB7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFsZXJ0aWZ5 U3B5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnQmFja3VwIGpvYicgKworICAgICAgICAg ICAgICAgICAgJyBmYWlsZWQuJywgJ3NvbWUgZXJyb3IgbWVzc2FnZScpOworICAgICAgICAgICAg ICAgIGRvbmUoKTsKKyAgICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICB9KTsKKyAgICAg ICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVz Y3JpYmUoJ0JhY2t1cERpYWxvZ1dyYXBwZXInLCAoKSA9PiB7CisgICAgZGVzY3JpYmUoJyNzZXRF eHRyYVBhcmFtZXRlcnMnLCAoKSA9PiB7CisgICAgICBsZXQgbW9kZWw7CisgICAgICBsZXQgZGlh bG9nOworICAgICAgbGV0IHNjaGVtYU5vZGU7CisgICAgICBsZXQgdGFibGVOb2RlOworICAgICAg YmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgIG1vZGVsID0gbmV3IEZha2VNb2RlbCgpOworICAg ICAgICBkaWFsb2cgPSBuZXcgRGlhbG9nV3JhcHBlcih7fSwgeworICAgICAgICAgIHBnQnJvd3Nl cjogcGdCcm93c2VyLAorICAgICAgICB9LCAnJywgJ2JhY2t1cF9vYmplY3RzJyk7CisgICAgICAg IGRpYWxvZy52aWV3ID0geworICAgICAgICAgIG1vZGVsOiBtb2RlbCwKKyAgICAgICAgfTsKKyAg ICAgICAgc2NoZW1hTm9kZSA9IHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKAorICAgICAg ICAgICdzY2hlbWEnLCB7CisgICAgICAgICAgICBfbGFiZWw6ICdzY2hlbWFfbGFiZWwnLAorICAg ICAgICAgICAgX3R5cGU6ICdzY2hlbWEnLAorICAgICAgICAgIH0sIFsnbGV2ZWwxJywgJ2xldmVs MS4xJywgJ2xldmVsMS4xLjEnXSk7CisgICAgICAgIHRhYmxlTm9kZSA9IHBnQnJvd3Nlci50cmVl TWVudS5hZGROZXdOb2RlKAorICAgICAgICAgICd0YWJsZScsIHsKKyAgICAgICAgICAgIF9sYWJl bDogJ3RhYmxlX2xhYmVsJywKKyAgICAgICAgICAgIF90eXBlOiAndGFibGUnLAorICAgICAgICAg IH0sIFsnbGV2ZWwxJywgJ2xldmVsMS4xJywgJ2xldmVsMS4xLjEnLCAnc2NoZW1hJ10pOworICAg ICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3R5cGUgaXMgc2NoZW1hJywgKCkgPT4geworICAgICAg ICBpdCgnYWRkIHNjaGVtYSBhcnJheSB0byB0aGUgbW9kZWwnLCAoKSA9PiB7CisgICAgICAgICAg ZGlhbG9nLnNldEV4dHJhUGFyYW1ldGVycyhzY2hlbWFOb2RlKTsKKyAgICAgICAgICBleHBlY3Qo bW9kZWwuZ2V0KCdzY2hlbWFzJykpLnRvRXF1YWwoWydzY2hlbWFfbGFiZWwnXSk7CisgICAgICAg IH0pOworICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3R5cGUgaXMgdGFibGUnLCAoKSA9PiB7 CisgICAgICAgIGl0KCdhZGQgc2NoZW1hIGFuZCB0YWJsZSB0byB0aGUgbW9kZWwnLCAoKSA9PiB7 CisgICAgICAgICAgZGlhbG9nLnNldEV4dHJhUGFyYW1ldGVycyh0YWJsZU5vZGUpOworICAgICAg ICAgIGV4cGVjdChtb2RlbC5nZXQoJ3RhYmxlcycpKS50b0VxdWFsKFtbJ3NjaGVtYV9sYWJlbCcs ICd0YWJsZV9sYWJlbCddXSk7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7CisgIH0p OworfSk7CmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2JhY2t1cC9nbG9i YWxfc2VydmVyX2JhY2t1cF9kaWFsb2dfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3Jp cHQvYmFja3VwL2dsb2JhbF9zZXJ2ZXJfYmFja3VwX2RpYWxvZ19zcGVjLmpzCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4wYjIyOTAzOAotLS0gL2Rldi9udWxsCisrKyBiL3dl Yi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvYmFja3VwL2dsb2JhbF9zZXJ2ZXJfYmFja3VwX2RpYWxv Z19zcGVjLmpzCkBAIC0wLDAgKzEsNTg1IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1pbiA0IC0gUG9z dGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgsIFRoZSBwZ0Fk bWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIg dGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitpbXBvcnQge0JhY2t1cERpYWxvZ30g ZnJvbSAnLi4vLi4vLi4vcGdhZG1pbi9zdGF0aWMvanMvYmFja3VwL2JhY2t1cF9kaWFsb2cnOwor aW1wb3J0IHtUcmVlRmFrZX0gZnJvbSAnLi4vdHJlZS90cmVlX2Zha2UnOworaW1wb3J0IE1vY2tB ZGFwdGVyIGZyb20gJ2F4aW9zLW1vY2stYWRhcHRlcic7CitpbXBvcnQgYXhpb3MgZnJvbSAnYXhp b3MvaW5kZXgnOworaW1wb3J0IHtGYWtlTW9kZWx9IGZyb20gJy4uL2Zha2VfbW9kZWwnOworCitj b25zdCBjb250ZXh0ID0gZGVzY3JpYmU7CisKK2Rlc2NyaWJlKCdHbG9iYWxTZXJ2ZXJCYWNrdXBE aWFsb2cnLCAoKSA9PiB7CisgIGxldCBiYWNrdXBEaWFsb2c7CisgIGxldCBiYWNrdXBOb2RlOwor ICBsZXQgcGdCcm93c2VyOworICBsZXQganF1ZXJ5U3B5OworICBsZXQgYWxlcnRpZnlTcHk7Cisg IGxldCBiYWNrdXBNb2RlbFNweTsKKyAgbGV0IGJhY2tmb3JtOworCisKKyAgbGV0IHJvb3ROb2Rl OworICBsZXQgc2VydmVyVHJlZU5vZGU7CisgIGxldCBwcGFzU2VydmVyVHJlZU5vZGU7CisgIGxl dCBub0RhdGFOb2RlOworCisgIGJlZm9yZUVhY2goKCkgPT4geworICAgIHBnQnJvd3NlciA9IHsK KyAgICAgIHRyZWVNZW51OiBuZXcgVHJlZUZha2UoKSwKKyAgICAgIE5vZGVzOiB7CisgICAgICAg IHNlcnZlcjogamFzbWluZS5jcmVhdGVTcHlPYmooJ05vZGVbc2VydmVyXScsIFsnZ2V0VHJlZU5v ZGVIaWVyYXJjaHknXSksCisgICAgICB9CisgICAgfTsKKyAgICBwZ0Jyb3dzZXIuTm9kZXMuc2Vy dmVyLmhhc0lkID0gdHJ1ZTsKKyAgICBqcXVlcnlTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgnanF1 ZXJ5U3B5Jyk7CisgICAgYmFja3VwTW9kZWxTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgnYmFja3Vw TW9kZWxTcHknKTsKKyAgICBiYWNrdXBOb2RlID0ge307CisgICAgYmFja2Zvcm0gPSBqYXNtaW5l LmNyZWF0ZVNweU9iaignYmFja2Zvcm0nLCBbJ2dlbmVyYXRlVmlld1NjaGVtYScsICdEaWFsb2cn XSk7CisKKyAgICByb290Tm9kZSA9IHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdsZXZl bDEnLCB7fSwgW10pOworICAgIHNlcnZlclRyZWVOb2RlID0gcGdCcm93c2VyLnRyZWVNZW51LmFk ZE5ld05vZGUoJ2xldmVsMS4xJywgeworICAgICAgX3R5cGU6ICdzZXJ2ZXInLAorICAgICAgX2lk OiAxMCwKKyAgICB9LCBbJ2xldmVsMSddKTsKKyAgICBwcGFzU2VydmVyVHJlZU5vZGUgPSBwZ0Jy b3dzZXIudHJlZU1lbnUuYWRkTmV3Tm9kZSgnbGV2ZWwxLjInLCB7CisgICAgICBfdHlwZTogJ3Nl cnZlcicsCisgICAgICBzZXJ2ZXJfdHlwZTogJ3BwYXMnLAorICAgIH0sIFsnbGV2ZWwxJ10pOwor ICAgIHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdsZXZlbDMnLCB7fSwgWydsZXZlbDEn LCAnbGV2ZWwxLjInXSk7CisgICAgbm9EYXRhTm9kZSA9IHBnQnJvd3Nlci50cmVlTWVudS5hZGRO ZXdOb2RlKAorICAgICAgJ2xldmVsMy4xJywgdW5kZWZpbmVkLCBbJ2xldmVsMScsICdsZXZlbDEu MicsICdsZXZlbDMnXSk7CisgIH0pOworCisgIGRlc2NyaWJlKCcjZHJhdycsICgpID0+IHsKKyAg ICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgIGFsZXJ0aWZ5U3B5ID0gamFzbWluZS5jcmVhdGVT cHlPYmooJ2FsZXJ0aWZ5JywgWydhbGVydCcsICdkaWFsb2cnXSk7CisgICAgICBhbGVydGlmeVNw eVsnQmFja3VwRGlhbG9nX2dsb2JhbHMnXSA9IGphc21pbmUuY3JlYXRlU3B5KCdCYWNrdXBEaWFs b2dfZ2xvYmFscycpOworICAgICAgYWxlcnRpZnlTcHlbJ0JhY2t1cERpYWxvZ19zZXJ2ZXInXSA9 IGphc21pbmUuY3JlYXRlU3B5KCdCYWNrdXBEaWFsb2dfc2VydmVyJyk7CisgICAgICBiYWNrdXBE aWFsb2cgPSBuZXcgQmFja3VwRGlhbG9nKAorICAgICAgICBwZ0Jyb3dzZXIsCisgICAgICAgIGpx dWVyeVNweSwKKyAgICAgICAgYWxlcnRpZnlTcHksCisgICAgICAgIGJhY2t1cE1vZGVsU3B5Cisg ICAgICApOworCisgICAgICBwZ0Jyb3dzZXIuZ2V0X3ByZWZlcmVuY2UgPSBqYXNtaW5lLmNyZWF0 ZVNweSgnZ2V0X3ByZWZlcmVuY2VzJyk7CisgICAgfSk7CisKKyAgICBjb250ZXh0KCd0aGVyZSBh cmUgbm8gYW5jZXN0b3JzIG9mIHRoZSB0eXBlIHNlcnZlcicsICgpID0+IHsKKyAgICAgIGl0KCdk b2VzIG5vdCBjcmVhdGUgYSBkaWFsb2cnLCAoKSA9PiB7CisgICAgICAgIHBnQnJvd3Nlci50cmVl TWVudS5zZXRTZWxlY3RlZE5vZGUoW3tpZDogJ2xldmVsMSd9XSk7CisgICAgICAgIGJhY2t1cERp YWxvZy5kcmF3KG51bGwsIG51bGwsIG51bGwpOworICAgICAgICBleHBlY3QoYWxlcnRpZnlTcHlb J0JhY2t1cERpYWxvZ19nbG9iYWxzJ10pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7CisgICAgICAg IGV4cGVjdChhbGVydGlmeVNweVsnQmFja3VwRGlhbG9nX3NlcnZlciddKS5ub3QudG9IYXZlQmVl bkNhbGxlZCgpOworICAgICAgfSk7CisKKyAgICAgIGl0KCdkaXNwbGF5IGFuIGFsZXJ0IHdpdGgg YSBCYWNrdXAgRXJyb3InLCAoKSA9PiB7CisgICAgICAgIGJhY2t1cERpYWxvZy5kcmF3KG51bGws IFtyb290Tm9kZV0sIG51bGwpOworICAgICAgICBleHBlY3QoYWxlcnRpZnlTcHkuYWxlcnQpLnRv SGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAgICdCYWNrdXAgRXJyb3InLAorICAgICAgICAg ICdQbGVhc2Ugc2VsZWN0IHNlcnZlciBvciBjaGlsZCBub2RlIGZyb20gdGhlIGJyb3dzZXIgdHJl ZS4nCisgICAgICAgICk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGNvbnRleHQoJ3RoZXJl IGlzIGFuIGFuY2VzdG9yIG9mIHRoZSB0eXBlIHNlcnZlcicsICgpID0+IHsKKyAgICAgIGNvbnRl eHQoJ25vIHByZWZlcmVuY2UgY2FuIGJlIGZvdW5kJywgKCkgPT4geworICAgICAgICBiZWZvcmVF YWNoKCgpID0+IHsKKyAgICAgICAgICBwZ0Jyb3dzZXIuZ2V0X3ByZWZlcmVuY2UuYW5kLnJldHVy blZhbHVlKHVuZGVmaW5lZCk7CisgICAgICAgIH0pOworCisgICAgICAgIGNvbnRleHQoJ3NlcnZl ciBpcyBhIHBwYXMgc2VydmVyJywgKCkgPT4geworICAgICAgICAgIGl0KCdkaXNwbGF5IGFuIGFs ZXJ0IHdpdGggIkJhY2t1cCBFcnJvciInLCAoKSA9PiB7CisgICAgICAgICAgICBiYWNrdXBEaWFs b2cuZHJhdyhudWxsLCBbc2VydmVyVHJlZU5vZGVdLCBudWxsKTsKKyAgICAgICAgICAgIGV4cGVj dChhbGVydGlmeVNweS5hbGVydCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAgICAgICAg ICdCYWNrdXAgRXJyb3InLAorICAgICAgICAgICAgICAnRmFpbGVkIHRvIGxvYWQgcHJlZmVyZW5j ZSBwZ19iaW5fZGlyIG9mIG1vZHVsZSBwYXRocycKKyAgICAgICAgICAgICk7CisgICAgICAgICAg fSk7CisgICAgICAgIH0pOworCisgICAgICAgIGNvbnRleHQoJ3NlcnZlciBpcyBub3QgYSBwcGFz IHNlcnZlcicsICgpID0+IHsKKyAgICAgICAgICBpdCgnZGlzcGxheSBhbiBhbGVydCB3aXRoICJC YWNrdXAgRXJyb3IiJywgKCkgPT4geworICAgICAgICAgICAgYmFja3VwRGlhbG9nLmRyYXcobnVs bCwgW3BwYXNTZXJ2ZXJUcmVlTm9kZV0sIG51bGwpOworICAgICAgICAgICAgZXhwZWN0KGFsZXJ0 aWZ5U3B5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAgICAgJ0JhY2t1 cCBFcnJvcicsCisgICAgICAgICAgICAgICdGYWlsZWQgdG8gbG9hZCBwcmVmZXJlbmNlIHBwYXNf YmluX2RpciBvZiBtb2R1bGUgcGF0aHMnCisgICAgICAgICAgICApOworICAgICAgICAgIH0pOwor ICAgICAgICB9KTsKKyAgICAgIH0pOworCisgICAgICBjb250ZXh0KCdwcmVmZXJlbmNlIGNhbiBi ZSBmb3VuZCcsICgpID0+IHsKKyAgICAgICAgY29udGV4dCgnYmluYXJ5IGZvbGRlciBpcyBub3Qg Y29uZmlndXJlZCcsICgpID0+IHsKKyAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAg ICAgICAgIHBnQnJvd3Nlci5nZXRfcHJlZmVyZW5jZS5hbmQucmV0dXJuVmFsdWUoe30pOworICAg ICAgICAgIH0pOworCisgICAgICAgICAgY29udGV4dCgnc2VydmVyIGlzIGEgcHBhcyBzZXJ2ZXIn LCAoKSA9PiB7CisgICAgICAgICAgICBpdCgnZGlzcGxheSBhbiBhbGVydCB3aXRoICJDb25maWd1 cmF0aW9uIHJlcXVpcmVkIicsICgpID0+IHsKKyAgICAgICAgICAgICAgYmFja3VwRGlhbG9nLmRy YXcobnVsbCwgW3NlcnZlclRyZWVOb2RlXSwgbnVsbCk7CisgICAgICAgICAgICAgIGV4cGVjdChh bGVydGlmeVNweS5hbGVydCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAgICAgICAgICAg J0NvbmZpZ3VyYXRpb24gcmVxdWlyZWQnLAorICAgICAgICAgICAgICAgICdQbGVhc2UgY29uZmln dXJlIHRoZSBQb3N0Z3JlU1FMIEJpbmFyeSBQYXRoIGluIHRoZSBQcmVmZXJlbmNlcyBkaWFsb2cu JworICAgICAgICAgICAgICApOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfSk7CisKKyAg ICAgICAgICBjb250ZXh0KCdzZXJ2ZXIgaXMgbm90IGEgcHBhcyBzZXJ2ZXInLCAoKSA9PiB7Cisg ICAgICAgICAgICBpdCgnZGlzcGxheSBhbiBhbGVydCB3aXRoICJDb25maWd1cmF0aW9uIHJlcXVp cmVkIicsICgpID0+IHsKKyAgICAgICAgICAgICAgYmFja3VwRGlhbG9nLmRyYXcobnVsbCwgW3Bw YXNTZXJ2ZXJUcmVlTm9kZV0sIG51bGwpOworICAgICAgICAgICAgICBleHBlY3QoYWxlcnRpZnlT cHkuYWxlcnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAgICAgICAgICdDb25maWd1 cmF0aW9uIHJlcXVpcmVkJywKKyAgICAgICAgICAgICAgICAnUGxlYXNlIGNvbmZpZ3VyZSB0aGUg RURCIEFkdmFuY2VkIFNlcnZlciBCaW5hcnkgUGF0aCBpbiB0aGUgUHJlZmVyZW5jZXMgZGlhbG9n LicKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0pOworICAg ICAgICB9KTsKKworICAgICAgICBjb250ZXh0KCdiaW5hcnkgZm9sZGVyIGlzIGNvbmZpZ3VyZWQn LCAoKSA9PiB7CisgICAgICAgICAgbGV0IGdsb2JhbFJlc2l6ZVRvU3B5OworICAgICAgICAgIGxl dCBzZXJ2ZXJSZXNpemVUb1NweTsKKyAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAg ICAgICAgIGdsb2JhbFJlc2l6ZVRvU3B5ID0gamFzbWluZS5jcmVhdGVTcHlPYmooJ2dsb2JhbHMn LCBbJ3Jlc2l6ZVRvJ10pOworICAgICAgICAgICAgYWxlcnRpZnlTcHlbJ0JhY2t1cERpYWxvZ19n bG9iYWxzJ10uYW5kCisgICAgICAgICAgICAgIC5yZXR1cm5WYWx1ZShnbG9iYWxSZXNpemVUb1Nw eSk7CisgICAgICAgICAgICBzZXJ2ZXJSZXNpemVUb1NweSA9IGphc21pbmUuY3JlYXRlU3B5T2Jq KCdzZXJ2ZXInLCBbJ3Jlc2l6ZVRvJ10pOworICAgICAgICAgICAgYWxlcnRpZnlTcHlbJ0JhY2t1 cERpYWxvZ19zZXJ2ZXInXS5hbmQKKyAgICAgICAgICAgICAgLnJldHVyblZhbHVlKHNlcnZlclJl c2l6ZVRvU3B5KTsKKyAgICAgICAgICAgIHBnQnJvd3Nlci5nZXRfcHJlZmVyZW5jZS5hbmQucmV0 dXJuVmFsdWUoe3ZhbHVlOiAnL3NvbWUvcGF0aCd9KTsKKyAgICAgICAgICB9KTsKKworICAgICAg ICAgIGNvbnRleHQoJ2RpYWxvZyBmb3IgZ2xvYmFsIGJhY2t1cCcsICgpID0+IHsKKyAgICAgICAg ICAgIGl0KCdkaXNwbGF5cyB0aGUgZGlhbG9nJywgKCkgPT4geworICAgICAgICAgICAgICBiYWNr dXBEaWFsb2cuZHJhdyhudWxsLCBbc2VydmVyVHJlZU5vZGVdLCB7Z2xvYmFsczogdHJ1ZX0pOwor ICAgICAgICAgICAgICBleHBlY3QoYWxlcnRpZnlTcHlbJ0JhY2t1cERpYWxvZ19nbG9iYWxzJ10p LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHRydWUpOworICAgICAgICAgICAgICBleHBlY3QoZ2xvYmFs UmVzaXplVG9TcHkucmVzaXplVG8pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCc2MCUnLCAnNTAlJyk7 CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIGNvbnRleHQoJ2Rp YWxvZyBmb3IgZ2xvYmFsIGJhY2t1cCcsICgpID0+IHsKKyAgICAgICAgICAgIGl0KCdkaXNwbGF5 cyB0aGUgZGlhbG9nJywgKCkgPT4geworICAgICAgICAgICAgICBiYWNrdXBEaWFsb2cuZHJhdyhu dWxsLCBbc2VydmVyVHJlZU5vZGVdLCB7c2VydmVyOiB0cnVlfSk7CisgICAgICAgICAgICAgIGV4 cGVjdChhbGVydGlmeVNweVsnQmFja3VwRGlhbG9nX3NlcnZlciddKS50b0hhdmVCZWVuQ2FsbGVk V2l0aCh0cnVlKTsKKyAgICAgICAgICAgICAgZXhwZWN0KHNlcnZlclJlc2l6ZVRvU3B5LnJlc2l6 ZVRvKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnNjAlJywgJzUwJScpOworICAgICAgICAgICAgfSk7 CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7CisgIH0pOwor CisgIGRlc2NyaWJlKCcjZGlhbG9nRmFjdG9yeScsICgpID0+IHsKKyAgICBkZXNjcmliZSgnI3By ZXBhcmUnLCAoKSA9PiB7CisgICAgICBsZXQgYmFja3VwSlF1ZXJ5Q29udGFpbmVyOworICAgICAg bGV0IHZpZXdTY2hlbWE7CisgICAgICBsZXQgZ2VuZXJhdGVkQmFja3VwTW9kZWw7CisgICAgICBs ZXQgYmFja3VwTm9kZUNoaWxkTm9kZTsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAg ICBiYWNrdXBKUXVlcnlDb250YWluZXIgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignYmFja3VwSlF1 ZXJ5Q29udGFpbmVyJywgWydnZXQnXSk7CisgICAgICAgIGJhY2t1cEpRdWVyeUNvbnRhaW5lci5n ZXQuYW5kLnJldHVyblZhbHVlKGJhY2t1cEpRdWVyeUNvbnRhaW5lcik7CisgICAgICAgIHZpZXdT Y2hlbWEgPSB7fTsKKyAgICAgICAgZ2VuZXJhdGVkQmFja3VwTW9kZWwgPSB7fTsKKyAgICAgICAg YmFja3VwTm9kZS5fX2ludGVybmFsID0geworICAgICAgICAgIGJ1dHRvbnM6IFsKKyAgICAgICAg ICAgIHt9LCB7fSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZWxlbWVudDogeworICAg ICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwKKyAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfTsKKyAgICAgICAgYmFja3VwTm9kZS5lbGVtZW50 cyA9IHsKKyAgICAgICAgICBib2R5OiB7CisgICAgICAgICAgICBjaGlsZE5vZGVzOiBbCisgICAg ICAgICAgICAgIHt9CisgICAgICAgICAgICBdCisgICAgICAgICAgfSwKKyAgICAgICAgICBjb250 ZW50OiBqYXNtaW5lLmNyZWF0ZVNweU9iaignY29udGVudCcsIFsnYXBwZW5kQ2hpbGQnXSksCisg ICAgICAgIH07CisKKyAgICAgICAgYmFja2Zvcm0uZ2VuZXJhdGVWaWV3U2NoZW1hLmFuZC5yZXR1 cm5WYWx1ZSh2aWV3U2NoZW1hKTsKKyAgICAgICAgYmFja3VwTW9kZWxTcHkuYW5kLnJldHVyblZh bHVlKGdlbmVyYXRlZEJhY2t1cE1vZGVsKTsKKworICAgICAgICBiYWNrdXBEaWFsb2cgPSBuZXcg QmFja3VwRGlhbG9nKAorICAgICAgICAgIHBnQnJvd3NlciwKKyAgICAgICAgICBqcXVlcnlTcHks CisgICAgICAgICAgYWxlcnRpZnlTcHksCisgICAgICAgICAgYmFja3VwTW9kZWxTcHksCisgICAg ICAgICAgYmFja2Zvcm0KKyAgICAgICAgKTsKKworICAgICAgICBiYWNrdXBOb2RlQ2hpbGROb2Rl ID0gamFzbWluZS5jcmVhdGVTcHlPYmooJ3NvbWV0aGluZycsIFsnYWRkQ2xhc3MnXSk7CisKKyAg ICAgICAganF1ZXJ5U3B5LmFuZC5jYWxsRmFrZSgoc2VsZWN0b3IpID0+IHsKKyAgICAgICAgICBp ZiAoc2VsZWN0b3IgPT09ICc8ZGl2IGNsYXNzPVwnYmFja3VwX2RpYWxvZ1wnPjwvZGl2PicpIHsK KyAgICAgICAgICAgIHJldHVybiBiYWNrdXBKUXVlcnlDb250YWluZXI7CisgICAgICAgICAgfSBl bHNlIGlmIChzZWxlY3RvciA9PT0gYmFja3VwTm9kZS5lbGVtZW50cy5ib2R5LmNoaWxkTm9kZXNb MF0pIHsKKyAgICAgICAgICAgIHJldHVybiBiYWNrdXBOb2RlQ2hpbGROb2RlOworICAgICAgICAg IH0KKyAgICAgICAgfSkKKyAgICAgIH0pOworCisgICAgICBjb250ZXh0KCdzZWxlY3RlZCB0cmVl IG5vZGUgaGFzIG5vIGRhdGEnLCAoKSA9PiB7CisgICAgICAgIGJlZm9yZUVhY2goKCkgPT4gewor ICAgICAgICAgIHBnQnJvd3Nlci50cmVlTWVudS5zZXRTZWxlY3RlZE5vZGUoW25vRGF0YU5vZGVd KTsKKyAgICAgICAgICBjb25zdCBkaWFsb2cgPSBiYWNrdXBEaWFsb2cuZGlhbG9nRmFjdG9yeSgn U29tZSB0aXRsZScsICdnbG9iYWxzJyk7CisgICAgICAgICAgT2JqZWN0LmFzc2lnbihkaWFsb2cs IGJhY2t1cE5vZGUpLnByZXBhcmUoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ2RvZXMg bm90IGNyZWF0ZSBhIGJhY2tmb3JtIGRpYWxvZycsICgpID0+IHsKKyAgICAgICAgICBleHBlY3Qo YmFja2Zvcm0uRGlhbG9nKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoKTsKKyAgICAgICAgfSk7 CisKKyAgICAgICAgaXQoJ2Rpc2FibGVzIHRoZSBidXR0b24gc3VibWl0IGJ1dHRvbiB1bnRpbCBh IGZpbGVuYW1lIGlzIHNlbGVjdGVkJywgKCkgPT4geworICAgICAgICAgIGV4cGVjdChiYWNrdXBO b2RlLl9faW50ZXJuYWwuYnV0dG9uc1syXS5lbGVtZW50LmRpc2FibGVkKS50b0JlKHRydWUpOwor ICAgICAgICB9KTsKKyAgICAgIH0pOworCisgICAgICBjb250ZXh0KCdubyB0cmVlIGVsZW1lbnQg aXMgc2VsZWN0ZWQnLCAoKSA9PiB7CisgICAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAg ICAgIGNvbnN0IGRpYWxvZyA9IGJhY2t1cERpYWxvZy5kaWFsb2dGYWN0b3J5KCdTb21lIHRpdGxl JywgJ2dsb2JhbHMnKTsKKyAgICAgICAgICBPYmplY3QuYXNzaWduKGRpYWxvZywgYmFja3VwTm9k ZSkucHJlcGFyZSgpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnZG9lcyBub3QgY3JlYXRl IGEgYmFja2Zvcm0gZGlhbG9nJywgKCkgPT4geworICAgICAgICAgIGV4cGVjdChiYWNrZm9ybS5E aWFsb2cpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aCgpOworICAgICAgICB9KTsKKworICAgICAg ICBpdCgnZGlzYWJsZXMgdGhlIGJ1dHRvbiBzdWJtaXQgYnV0dG9uIHVudGlsIGEgZmlsZW5hbWUg aXMgc2VsZWN0ZWQnLCAoKSA9PiB7CisgICAgICAgICAgZXhwZWN0KGJhY2t1cE5vZGUuX19pbnRl cm5hbC5idXR0b25zWzJdLmVsZW1lbnQuZGlzYWJsZWQpLnRvQmUodHJ1ZSk7CisgICAgICAgIH0p OworICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3RyZWUgZWxlbWVudCBpcyBzZWxlY3RlZCcs ICgpID0+IHsKKyAgICAgICAgbGV0IHRyZWVIaWVyYXJjaHlJbmZvcm1hdGlvbjsKKyAgICAgICAg bGV0IGRpYWxvZ1NweTsKKyAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgICAgdHJl ZUhpZXJhcmNoeUluZm9ybWF0aW9uID0geworICAgICAgICAgICAgc2VydmVyOiB7CisgICAgICAg ICAgICAgIF90eXBlOiAnc2VydmVyJywKKyAgICAgICAgICAgICAgX2lkOiAxMCwKKyAgICAgICAg ICAgICAgcHJpb3JpdHk6IDAsCisgICAgICAgICAgICB9CisgICAgICAgICAgfTsKKyAgICAgICAg ICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2V0U2VsZWN0ZWROb2RlKFtzZXJ2ZXJUcmVlTm9kZV0pOwor ICAgICAgICAgIHBnQnJvd3Nlci5Ob2Rlc1snc2VydmVyJ10uZ2V0VHJlZU5vZGVIaWVyYXJjaHku YW5kCisgICAgICAgICAgICAucmV0dXJuVmFsdWUodHJlZUhpZXJhcmNoeUluZm9ybWF0aW9uKTsK KyAgICAgICAgICBkaWFsb2dTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignbmV3VmlldycsIFsn cmVuZGVyJ10pOworICAgICAgICAgIGRpYWxvZ1NweS4kZWwgPSBqYXNtaW5lLmNyZWF0ZVNweU9i aignJGVsJywgWydmaW5kJ10pOworICAgICAgICAgIGRpYWxvZ1NweS5tb2RlbCA9IGphc21pbmUu Y3JlYXRlU3B5T2JqKCdtb2RlbCcsIFsnb24nXSkKKyAgICAgICAgICBkaWFsb2dTcHkuJGVsLmZp bmQuYW5kLnJldHVyblZhbHVlKFtdKTsKKworICAgICAgICAgIGJhY2tmb3JtLkRpYWxvZy5hbmQu cmV0dXJuVmFsdWUoZGlhbG9nU3B5KTsKKworICAgICAgICAgIGNvbnN0IGRpYWxvZyA9IGJhY2t1 cERpYWxvZy5kaWFsb2dGYWN0b3J5KCdTb21lIHRpdGxlJywgJ2dsb2JhbHMnKTsKKyAgICAgICAg ICBPYmplY3QuYXNzaWduKGRpYWxvZywgYmFja3VwTm9kZSkucHJlcGFyZSgpOworICAgICAgICB9 KTsKKworICAgICAgICBpdCgnY3JlYXRlcyBhIGJhY2tmb3JtIGRpYWxvZyBhbmQgZGlzcGxheXMg aXQnLCAoKSA9PiB7CisgICAgICAgICAgZXhwZWN0KGJhY2tmb3JtLkRpYWxvZykudG9IYXZlQmVl bkNhbGxlZFdpdGgoeworICAgICAgICAgICAgZWw6IGJhY2t1cEpRdWVyeUNvbnRhaW5lciwKKyAg ICAgICAgICAgIG1vZGVsOiBnZW5lcmF0ZWRCYWNrdXBNb2RlbCwKKyAgICAgICAgICAgIHNjaGVt YTogdmlld1NjaGVtYSwKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIGV4cGVjdChkaWFsb2dT cHkucmVuZGVyKS50b0hhdmVCZWVuQ2FsbGVkKCk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0 KCdhZGQgYWxlcnRpZnkgY2xhc3NlcyB0byBiYWNrdXAgbm9kZSBjaGlsZG5vZGUnLCAoKSA9PiB7 CisgICAgICAgICAgZXhwZWN0KGJhY2t1cE5vZGVDaGlsZE5vZGUuYWRkQ2xhc3MpCisgICAgICAg ICAgICAudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2FsZXJ0aWZ5X3Rvb2xzX2RpYWxvZ19wcm9wZXJ0 aWVzIG9ial9wcm9wZXJ0aWVzJyk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdkaXNhYmxl cyB0aGUgYnV0dG9uIHN1Ym1pdCBidXR0b24gdW50aWwgYSBmaWxlbmFtZSBpcyBzZWxlY3RlZCcs ICgpID0+IHsKKyAgICAgICAgICBleHBlY3QoYmFja3VwTm9kZS5fX2ludGVybmFsLmJ1dHRvbnNb Ml0uZWxlbWVudC5kaXNhYmxlZCkudG9CZSh0cnVlKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg aXQoJ2dlbmVyYXRlcyBhIG5ldyBiYWNrdXAgbW9kZWwnLCAoKSA9PiB7CisgICAgICAgICAgZXhw ZWN0KGJhY2t1cE1vZGVsU3B5KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAgIHt0 eXBlOiAnZ2xvYmFscyd9LAorICAgICAgICAgICAge25vZGVfaW5mbzogdHJlZUhpZXJhcmNoeUlu Zm9ybWF0aW9ufQorICAgICAgICAgICk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdhZGQg dGhlIG5ldyBkaWFsb2cgdG8gdGhlIGJhY2t1cCBub2RlIEhUTUwnLCAoKSA9PiB7CisgICAgICAg ICAgZXhwZWN0KGJhY2t1cE5vZGUuZWxlbWVudHMuY29udGVudC5hcHBlbmRDaGlsZCkudG9IYXZl QmVlbkNhbGxlZFdpdGgoYmFja3VwSlF1ZXJ5Q29udGFpbmVyKTsKKyAgICAgICAgfSk7CisgICAg ICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCcjb25CdXR0b25DbGlja2VkJywgKCkgPT4g eworICAgICAgbGV0IGJhY2t1cEpRdWVyeUNvbnRhaW5lcjsKKyAgICAgIGxldCBiYWNrdXBOb2Rl Q2hpbGROb2RlOworICAgICAgbGV0IGRpYWxvZzsKKyAgICAgIGxldCBuZXR3b3JrTW9jazsKKwor ICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgIG5ldHdvcmtNb2NrID0gbmV3IE1vY2tB ZGFwdGVyKGF4aW9zKTsKKyAgICAgICAgYmFja3VwSlF1ZXJ5Q29udGFpbmVyID0gamFzbWluZS5j cmVhdGVTcHlPYmooJ2JhY2t1cEpRdWVyeUNvbnRhaW5lcicsIFsnZ2V0J10pOworICAgICAgICBi YWNrdXBKUXVlcnlDb250YWluZXIuZ2V0LmFuZC5yZXR1cm5WYWx1ZShiYWNrdXBKUXVlcnlDb250 YWluZXIpOworICAgICAgICBwZ0Jyb3dzZXIuc2hvd0hlbHAgPSBqYXNtaW5lLmNyZWF0ZVNweSgn c2hvd0hlbHAnKTsKKyAgICAgICAgYWxlcnRpZnlTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaign YWxlcnRpZnknLCBbJ3N1Y2Nlc3MnLCAnYWxlcnQnXSk7CisKKyAgICAgICAgYmFja3VwRGlhbG9n ID0gbmV3IEJhY2t1cERpYWxvZygKKyAgICAgICAgICBwZ0Jyb3dzZXIsCisgICAgICAgICAganF1 ZXJ5U3B5LAorICAgICAgICAgIGFsZXJ0aWZ5U3B5LAorICAgICAgICAgIGJhY2t1cE1vZGVsU3B5 LAorICAgICAgICAgIGJhY2tmb3JtCisgICAgICAgICk7CisKKyAgICAgICAgYmFja3VwTm9kZUNo aWxkTm9kZSA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCdzb21ldGhpbmcnLCBbJ2FkZENsYXNzJ10p OworCisgICAgICAgIGRpYWxvZyA9IE9iamVjdC5hc3NpZ24oYmFja3VwRGlhbG9nLmRpYWxvZ0Zh Y3RvcnkoJ1NvbWUgdGl0bGUnLCAnc2VydmVyJyksIGJhY2t1cE5vZGUpOworICAgICAgfSk7CisK KyAgICAgIGFmdGVyRWFjaCgoKSA9PiB7CisgICAgICAgIG5ldHdvcmtNb2NrLnJlc3RvcmUoKTsK KyAgICAgIH0pOworCisgICAgICBjb250ZXh0KCdkaWFsb2cgaGVscCBidXR0b24gd2FzIHByZXNz ZWQnLCAoKSA9PiB7CisgICAgICAgIGxldCBuZXR3b3JrQ2FsbGVkOworICAgICAgICBiZWZvcmVF YWNoKCgpID0+IHsKKyAgICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2V0U2VsZWN0ZWROb2Rl KFtzZXJ2ZXJUcmVlTm9kZV0pOworICAgICAgICAgIG5ldHdvcmtDYWxsZWQgPSBmYWxzZTsKKyAg ICAgICAgICBuZXR3b3JrTW9jay5vbkFueSgvLisvKS5yZXBseSgoKSA9PiB7CisgICAgICAgICAg ICBuZXR3b3JrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBbMjAwLCB7fV07Cisg ICAgICAgICAgfSk7CisKKyAgICAgICAgICBjb25zdCBldmVudCA9IHsKKyAgICAgICAgICAgIGJ1 dHRvbjogeworICAgICAgICAgICAgICBlbGVtZW50OiB7CisgICAgICAgICAgICAgICAgbmFtZTog J2RpYWxvZ19oZWxwJywKKyAgICAgICAgICAgICAgICBnZXRBdHRyaWJ1dGU6IChhdHRyaWJ1dGVO YW1lKSA9PiB7CisgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PT0gJ3VybCcp IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRwOi8vc29tZXVybCc7CisgICAgICAg ICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT09ICdsYWJlbCcpIHsKKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuICdzb21lIGxhYmVsJzsKKyAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgICB9OworICAgICAgICAgIGRpYWxvZy5jYWxsYmFjayhldmVudCk7CisgICAgICAgIH0pOwor CisgICAgICAgIGl0KCdkaXNwbGF5cyBoZWxwIGZvciBkaWFsb2cnLCAoKSA9PiB7CisgICAgICAg ICAgZXhwZWN0KHBnQnJvd3Nlci5zaG93SGVscCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAg ICAgICAgICAnZGlhbG9nX2hlbHAnLAorICAgICAgICAgICAgJ2h0dHA6Ly9zb21ldXJsJywKKyAg ICAgICAgICAgIHBnQnJvd3Nlci5Ob2Rlc1snc2VydmVyJ10sCisgICAgICAgICAgICBzZXJ2ZXJU cmVlTm9kZSwKKyAgICAgICAgICAgICdzb21lIGxhYmVsJworICAgICAgICAgICkKKyAgICAgICAg fSk7CisKKyAgICAgICAgaXQoJ2RvZXMgbm90IHN0YXJ0IHRoZSBiYWNrdXAnLCAoKSA9PiB7Cisg ICAgICAgICAgZXhwZWN0KG5ldHdvcmtDYWxsZWQpLnRvQmUoZmFsc2UpOworICAgICAgICB9KTsK KyAgICAgIH0pOworCisgICAgICBjb250ZXh0KCdvYmplY3QgaGVscCBidXR0b24gd2FzIHByZXNz ZWQnLCAoKSA9PiB7CisgICAgICAgIGxldCBuZXR3b3JrQ2FsbGVkOworICAgICAgICBiZWZvcmVF YWNoKCgpID0+IHsKKyAgICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2V0U2VsZWN0ZWROb2Rl KFtzZXJ2ZXJUcmVlTm9kZV0pOworICAgICAgICAgIG5ldHdvcmtDYWxsZWQgPSBmYWxzZTsKKyAg ICAgICAgICBuZXR3b3JrTW9jay5vbkFueSgvLisvKS5yZXBseSgoKSA9PiB7CisgICAgICAgICAg ICBuZXR3b3JrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBbMjAwLCB7fV07Cisg ICAgICAgICAgfSk7CisKKyAgICAgICAgICBjb25zdCBldmVudCA9IHsKKyAgICAgICAgICAgIGJ1 dHRvbjogeworICAgICAgICAgICAgICBlbGVtZW50OiB7CisgICAgICAgICAgICAgICAgbmFtZTog J29iamVjdF9oZWxwJywKKyAgICAgICAgICAgICAgICBnZXRBdHRyaWJ1dGU6IChhdHRyaWJ1dGVO YW1lKSA9PiB7CisgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PT0gJ3VybCcp IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRwOi8vc29tZXVybCc7CisgICAgICAg ICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT09ICdsYWJlbCcpIHsKKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuICdzb21lIGxhYmVsJzsKKyAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgICB9OworICAgICAgICAgIGRpYWxvZy5jYWxsYmFjayhldmVudCk7CisgICAgICAgIH0pOwor CisgICAgICAgIGl0KCdkaXNwbGF5cyBoZWxwIGZvciBkaWFsb2cnLCAoKSA9PiB7CisgICAgICAg ICAgZXhwZWN0KHBnQnJvd3Nlci5zaG93SGVscCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAg ICAgICAgICAnb2JqZWN0X2hlbHAnLAorICAgICAgICAgICAgJ2h0dHA6Ly9zb21ldXJsJywKKyAg ICAgICAgICAgIHBnQnJvd3Nlci5Ob2Rlc1snc2VydmVyJ10sCisgICAgICAgICAgICBzZXJ2ZXJU cmVlTm9kZSwKKyAgICAgICAgICAgICdzb21lIGxhYmVsJworICAgICAgICAgICkKKyAgICAgICAg fSk7CisKKyAgICAgICAgaXQoJ2RvZXMgbm90IHN0YXJ0IHRoZSBiYWNrdXAnLCAoKSA9PiB7Cisg ICAgICAgICAgZXhwZWN0KG5ldHdvcmtDYWxsZWQpLnRvQmUoZmFsc2UpOworICAgICAgICB9KTsK KyAgICAgIH0pOworCisgICAgICBjb250ZXh0KCdiYWNrdXAgYnV0dG9uIHdhcyBwcmVzc2VkJywg KCkgPT4geworICAgICAgICBjb250ZXh0KCdubyB0cmVlIG5vZGUgaXMgc2VsZWN0ZWQnLCAoKSA9 PiB7CisgICAgICAgICAgbGV0IG5ldHdvcmtDYWxsZWQ7CisgICAgICAgICAgYmVmb3JlRWFjaCgo KSA9PiB7CisgICAgICAgICAgICBuZXR3b3JrQ2FsbGVkID0gZmFsc2U7CisgICAgICAgICAgICBu ZXR3b3JrTW9jay5vbkFueSgvLisvKS5yZXBseSgoKSA9PiB7CisgICAgICAgICAgICAgIG5ldHdv cmtDYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgICByZXR1cm4gWzIwMCwge31dOworICAgICAg ICAgICAgfSk7CisKKyAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0geworICAgICAgICAgICAgICBi dXR0b246IHsKKyAgICAgICAgICAgICAgICAnZGF0YS1idG4tbmFtZSc6ICdiYWNrdXAnLAorICAg ICAgICAgICAgICAgIGVsZW1lbnQ6IHsKKyAgICAgICAgICAgICAgICAgIGdldEF0dHJpYnV0ZTog KGF0dHJpYnV0ZU5hbWUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5h bWUgPT09ICd1cmwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRwOi8vc29t ZXVybCc7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PT0g J2xhYmVsJykgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnc29tZSBsYWJlbCc7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBkaWFsb2cu Y2FsbGJhY2soZXZlbnQpOworICAgICAgICAgIH0pOworCisgICAgICAgICAgaXQoJ2RvZXMgbm90 IHN0YXJ0IHRoZSBiYWNrdXAnLCAoKSA9PiB7CisgICAgICAgICAgICBleHBlY3QobmV0d29ya0Nh bGxlZCkudG9CZShmYWxzZSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAg IGNvbnRleHQoJ3NlbGVjdGVkIG5vZGUgaGFzIG5vIGRhdGEnLCAoKSA9PiB7CisgICAgICAgICAg bGV0IG5ldHdvcmtDYWxsZWQ7CisgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAg ICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2V0U2VsZWN0ZWROb2RlKFtub0RhdGFOb2RlXSk7Cisg ICAgICAgICAgICBuZXR3b3JrQ2FsbGVkID0gZmFsc2U7CisgICAgICAgICAgICBuZXR3b3JrTW9j ay5vbkFueSgvLisvKS5yZXBseSgoKSA9PiB7CisgICAgICAgICAgICAgIG5ldHdvcmtDYWxsZWQg PSB0cnVlOworICAgICAgICAgICAgICByZXR1cm4gWzIwMCwge31dOworICAgICAgICAgICAgfSk7 CisKKyAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0geworICAgICAgICAgICAgICBidXR0b246IHsK KyAgICAgICAgICAgICAgICAnZGF0YS1idG4tbmFtZSc6ICdiYWNrdXAnLAorICAgICAgICAgICAg ICAgIGVsZW1lbnQ6IHsKKyAgICAgICAgICAgICAgICAgIGdldEF0dHJpYnV0ZTogKGF0dHJpYnV0 ZU5hbWUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT09ICd1 cmwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRwOi8vc29tZXVybCc7Cisg ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PT0gJ2xhYmVsJykg eworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnc29tZSBsYWJlbCc7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBkaWFsb2cuY2FsbGJhY2so ZXZlbnQpOworICAgICAgICAgIH0pOworCisgICAgICAgICAgaXQoJ2RvZXMgbm90IHN0YXJ0IHRo ZSBiYWNrdXAnLCAoKSA9PiB7CisgICAgICAgICAgICBleHBlY3QobmV0d29ya0NhbGxlZCkudG9C ZShmYWxzZSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIGNvbnRleHQo J3NlbGVjdGVkIG5vZGUgaGFzIGRhdGEnLCAoKSA9PiB7CisgICAgICAgICAgYmVmb3JlRWFjaCgo KSA9PiB7CisgICAgICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2V0U2VsZWN0ZWROb2RlKFtz ZXJ2ZXJUcmVlTm9kZV0pOworICAgICAgICAgICAgcGdCcm93c2VyLkV2ZW50cyA9IGphc21pbmUu Y3JlYXRlU3B5T2JqKCdFdmVudHMnLCBbJ3RyaWdnZXInXSk7CisKKyAgICAgICAgICAgIGJhY2t1 cE5vZGUudmlldyA9IHsKKyAgICAgICAgICAgICAgbW9kZWw6IG5ldyBGYWtlTW9kZWwoKSwKKyAg ICAgICAgICAgIH07CisgICAgICAgICAgICBiYWNrdXBOb2RlLnZpZXcubW9kZWwuc2V0KCdkcW91 dGUnLCBmYWxzZSk7CisgICAgICAgICAgICBiYWNrdXBOb2RlLnZpZXcubW9kZWwuc2V0KCdmaWxl JywgJ3Rlc3QnKTsKKyAgICAgICAgICAgIGJhY2t1cE5vZGUudmlldy5tb2RlbC5zZXQoJ3R5cGUn LCAnZ2xvYmFscycpOworICAgICAgICAgICAgYmFja3VwTm9kZS52aWV3Lm1vZGVsLnNldCgndmVy Ym9zZScsIHRydWUpOworCisgICAgICAgICAgICBjb25zdCBldmVudCA9IHsKKyAgICAgICAgICAg ICAgYnV0dG9uOiB7CisgICAgICAgICAgICAgICAgJ2RhdGEtYnRuLW5hbWUnOiAnYmFja3VwJywK KyAgICAgICAgICAgICAgICBlbGVtZW50OiB7CisgICAgICAgICAgICAgICAgICBnZXRBdHRyaWJ1 dGU6IChhdHRyaWJ1dGVOYW1lKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1 dGVOYW1lID09PSAndXJsJykgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaHR0cDov L3NvbWV1cmwnOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUg PT09ICdsYWJlbCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NvbWUgbGFiZWwn OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgT2Jq ZWN0LmFzc2lnbihkaWFsb2csIGJhY2t1cE5vZGUpLmNhbGxiYWNrKGV2ZW50KTsKKyAgICAgICAg ICB9KTsKKyAgICAgICAgICBjb250ZXh0KCdjcmVhdGlvbiBvZiBiYWNrdXAgam9iIHN1Y2Nlc3Nm dWxsJywgKCkgPT4geworICAgICAgICAgICAgbGV0IGRhdGFTZW50VG9TZXJ2ZXI7CisgICAgICAg ICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgICAgICAgbmV0d29ya01vY2sub25Qb3N0 KCcvYmFja3VwL2pvYi8xMCcpLnJlcGx5KChyZXF1ZXN0KSA9PiB7CisgICAgICAgICAgICAgICAg ZGF0YVNlbnRUb1NlcnZlciA9IHJlcXVlc3QuZGF0YTsKKyAgICAgICAgICAgICAgICByZXR1cm4g WzIwMCwge31dOworICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAg ICAgICBpdCgnY3JlYXRlcyBhbiBzdWNjZXNzIGFsZXJ0IGJveCcsIChkb25lKSA9PiB7CisgICAg ICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAgICAgICAgICAgIGV4cGVjdChhbGVy dGlmeVNweS5zdWNjZXNzKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnQmFja3VwIGpvYicgKworICAg ICAgICAgICAgICAgICAgJyBjcmVhdGVkLicsIDUpOworICAgICAgICAgICAgICAgIGRvbmUoKTsK KyAgICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaXQo J3RyaWdnZXIgYmFja2dyb3VuZCBwcm9jZXNzJywgKGRvbmUpID0+IHsKKyAgICAgICAgICAgICAg c2V0VGltZW91dCgoKSA9PiB7CisgICAgICAgICAgICAgICAgZXhwZWN0KHBnQnJvd3Nlci5FdmVu dHMudHJpZ2dlcikudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAgICAgICAgICAgICAncGdh ZG1pbi1iZ3Byb2Nlc3M6Y3JlYXRlZCcsCisgICAgICAgICAgICAgICAgICBqYXNtaW5lLmFueXRo aW5nKCkKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGRvbmUoKTsKKyAgICAg ICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaXQoJ3NlbmQg Y29ycmVjdCBkYXRhIHRvIHNlcnZlcicsICgpID0+IHsKKyAgICAgICAgICAgICAgZXhwZWN0KGRh dGFTZW50VG9TZXJ2ZXIpLnRvRXF1YWwoSlNPTi5zdHJpbmdpZnkoeworICAgICAgICAgICAgICAg IGRxb3V0ZTogZmFsc2UsCisgICAgICAgICAgICAgICAgZmlsZTogJ3Rlc3QnLAorICAgICAgICAg ICAgICAgIHR5cGU6ICdnbG9iYWxzJywKKyAgICAgICAgICAgICAgICB2ZXJib3NlOiB0cnVlCisg ICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0pOworCisgICAg ICAgICAgY29udGV4dCgnZXJyb3IgY3JlYXRpbmcgYmFja3VwIGpvYicsICgpID0+IHsKKyAgICAg ICAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9 IHsKKyAgICAgICAgICAgICAgICBlcnJvcm1zZzogJ3NvbWUgZXJyb3IgbWVzc2FnZScKKyAgICAg ICAgICAgICAgfTsKKworICAgICAgICAgICAgICBuZXR3b3JrTW9jay5vblBvc3QoJy9iYWNrdXAv am9iLzEwJykucmVwbHkoKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiBbNTAwLCByZXNw b25zZV07CisgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg IGl0KCdjcmVhdGVzIGFuIGFsZXJ0IGJveCcsIChkb25lKSA9PiB7CisgICAgICAgICAgICAgIHNl dFRpbWVvdXQoKCkgPT4geworICAgICAgICAgICAgICAgIGV4cGVjdChhbGVydGlmeVNweS5hbGVy dCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ0JhY2t1cCBqb2InICsKKyAgICAgICAgICAgICAgICAg ICcgZmFpbGVkLicsICdzb21lIGVycm9yIG1lc3NhZ2UnKTsKKyAgICAgICAgICAgICAgICBkb25l KCk7CisgICAgICAgICAgICAgIH0sIDApOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfSk7 CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7CisgIH0pOworfSk7CmRpZmYgLS1naXQg YS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2JhY2t1cC9tZW51X3V0aWxzX3NwZWMuanMgYi93 ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2JhY2t1cC9tZW51X3V0aWxzX3NwZWMuanMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjhmNzc2OTc2Ci0tLSAvZGV2L251bGwKKysr IGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9iYWNrdXAvbWVudV91dGlsc19zcGVjLmpzCkBA IC0wLDAgKzEsMTY3IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29s cworLy8KKy8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3Bt ZW50IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVT UUwgTGljZW5jZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworaW1wb3J0IHtUcmVlRmFrZX0gZnJvbSAiLi4vdHJl ZS90cmVlX2Zha2UiOworaW1wb3J0IHsKKyAgbWVudUVuYWJsZWRTZXJ2ZXIsCisgIG1lbnVFbmFi bGVkCit9IGZyb20gIi4uLy4uLy4uL3BnYWRtaW4vc3RhdGljL2pzL2JhY2t1cC9tZW51X3V0aWxz IjsKKworY29uc3QgY29udGV4dCA9IGRlc2NyaWJlOworCitkZXNjcmliZSgnYmFja3VwLm1lbnVV dGlscycsICgpID0+IHsKKyAgZGVzY3JpYmUoJyNtZW51RW5hYmxlZCcsICgpID0+IHsKKyAgICBs ZXQgb3VyQnJvd3NlcjsKKyAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgIGNvbnN0IHRyZWUg PSBuZXcgVHJlZUZha2UoKTsKKyAgICAgIG91ckJyb3dzZXIgPSB7CisgICAgICAgIHRyZWVNZW51 OiB0cmVlLAorICAgICAgfTsKKyAgICAgIHRyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwxJywge30sIFtd KTsKKyAgICAgIHRyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwxLjEnLCB7X3R5cGU6ICdjYXRhbG9nJ30s IFsnbGV2ZWwxJ10pOworICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDEuMS4xJywge190eXBl OiAnZGF0YWJhc2UnfSwgWydsZXZlbDEnLCAnbGV2ZWwxLjEnXSk7CisgICAgICB0cmVlLmFkZE5l d05vZGUoJ2xldmVsMS4yJywge190eXBlOiAnYmFtbSd9LCBbJ2xldmVsMSddKTsKKyAgICAgIHRy ZWUuYWRkTmV3Tm9kZSgnbGV2ZWwxLjIuMScsIHsKKyAgICAgICAgX3R5cGU6ICdkYXRhYmFzZScs CisgICAgICAgIGFsbG93Q29ubjogdHJ1ZQorICAgICAgfSwgWydsZXZlbDEnLCAnbGV2ZWwxLjIn XSk7CisgICAgICB0cmVlLmFkZE5ld05vZGUoJ2xldmVsMS4yLjInLCB7CisgICAgICAgIF90eXBl OiAnZGF0YWJhc2UnLAorICAgICAgICBhbGxvd0Nvbm46IGZhbHNlCisgICAgICB9LCBbJ2xldmVs MScsICdsZXZlbDEuMiddKTsKKyAgICAgIHRyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwxLjIuMycsIHsK KyAgICAgICAgX3R5cGU6ICd0YWJsZScKKyAgICAgIH0sIFsnbGV2ZWwxJywgJ2xldmVsMS4yJ10p OworCisgICAgICB0cmVlLmFkZE5ld05vZGUoJ2xldmVsMicsIHt9LCBbXSk7CisgICAgICB0cmVl LmFkZE5ld05vZGUoJ2xldmVsMi4xJywgbnVsbCwgWydsZXZlbDInXSk7CisgICAgICB0cmVlLmFk ZE5ld05vZGUoJ2xldmVsMi4xLjEnLCB7fSwgWydsZXZlbDInLCAnbGV2ZWwyLjEnXSk7CisgICAg fSk7CisKKyAgICBjb250ZXh0KCdXaGVuIHRoZSBjdXJyZW50IG5vZGUgaXMgYSByb290IG5vZGUn LCAoKSA9PiB7CisgICAgICBpdCgncmV0dXJuIGZhbHNlJywgKCkgPT4geworICAgICAgICBleHBl Y3QobWVudUVuYWJsZWQuYXBwbHkob3VyQnJvd3NlciwgW3t9LCBbe2lkOiAnbGV2ZWwxJ31dXSkp LnRvQmUoZmFsc2UpOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICBjb250ZXh0KCd3aGVuIGN1 cnJlbnQgbm9kZSBkb2VzIG5vdCBleGlzdCcsICgpID0+IHsKKyAgICAgIGl0KCdyZXR1cm4gZmFs c2UnLCAoKSA9PiB7CisgICAgICAgIGV4cGVjdChtZW51RW5hYmxlZC5hcHBseShvdXJCcm93c2Vy LCBbe30sIFt7aWQ6ICdiYW1tJ31dXSkpLnRvQmUoZmFsc2UpOworICAgICAgfSk7CisgICAgfSk7 CisKKyAgICBjb250ZXh0KCdXaGVuIHRoZSBjdXJyZW50IG5vZGUgaXMgbm90IGEgcm9vdCBub2Rl JywgKCkgPT4geworICAgICAgY29udGV4dCgncGFyZW50IGRhdGEgZG9lcyBub3QgZXhpc3QnLCAo KSA9PiB7CisgICAgICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAgICAgICAgIGV4 cGVjdChtZW51RW5hYmxlZC5hcHBseShvdXJCcm93c2VyLCBbe30sIFt7aWQ6ICdsZXZlbDIuMS4x J31dXSkpLnRvQmUoZmFsc2UpOworICAgICAgICB9KTsKKyAgICAgIH0pOworCisgICAgICBjb250 ZXh0KCdwYXJlbnQgYXMgZGF0YScsICgpID0+IHsKKyAgICAgICAgY29udGV4dCgndGhlIGN1cnJl bnQgbm9kZSB0eXBlIGlzIGluIHRoZSBzdXBwb3J0ZWQgbm9kZSB0eXBlcycsICgpID0+IHsKKyAg ICAgICAgICBjb250ZXh0KCd0aGUgcGFyZW50IGlzIG9mIHRoZSB0eXBlIGNhdGFsb2cnLCAoKSA9 PiB7CisgICAgICAgICAgICBpdCgncmV0dXJucyBmYWxzZScsICgpID0+IHsKKyAgICAgICAgICAg ICAgZXhwZWN0KG1lbnVFbmFibGVkLmFwcGx5KG91ckJyb3dzZXIsIFsKKyAgICAgICAgICAgICAg ICB7X3R5cGU6ICdzY2hlbWEnfSwKKyAgICAgICAgICAgICAgICBbe2lkOiAnbGV2ZWwxLjEuMSd9 XQorICAgICAgICAgICAgICBdKSkudG9CZShmYWxzZSk7CisgICAgICAgICAgICB9KTsKKyAgICAg ICAgICB9KTsKKyAgICAgICAgICBjb250ZXh0KCd0aGUgcGFyZW50IGlzIG5vdCBvZiB0aGUgdHlw ZSBjYXRhbG9nJywgKCkgPT4geworICAgICAgICAgICAgY29udGV4dCgnY3VycmVudCBub2RlIGlz IG9mIHRoZSB0eXBlIGRhdGFiYXNlJywgKCkgPT4geworICAgICAgICAgICAgICBjb250ZXh0KCdj dXJyZW50IG5vZGUgYWxsb3dzIGNvbm5lY3Rpb24nLCAoKSA9PiB7CisgICAgICAgICAgICAgICAg aXQoJ3JldHVybnMgdHJ1ZScsICgpID0+IHsKKyAgICAgICAgICAgICAgICAgIGV4cGVjdChtZW51 RW5hYmxlZC5hcHBseShvdXJCcm93c2VyLCBbeworICAgICAgICAgICAgICAgICAgICBfdHlwZTog J2RhdGFiYXNlJywKKyAgICAgICAgICAgICAgICAgICAgYWxsb3dDb25uOiB0cnVlCisgICAgICAg ICAgICAgICAgICB9LCBbe2lkOiAnbGV2ZWwxLjIuMSd9XV0pKS50b0JlKHRydWUpOworICAgICAg ICAgICAgICAgIH0pOworICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgY29udGV4dCgn Y3VycmVudCBub2RlIGRvIG5vdCBhbGxvdyBjb25uZWN0aW9uJywgKCkgPT4geworICAgICAgICAg ICAgICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAgICAgICAgICAgICAgICAgZXhw ZWN0KG1lbnVFbmFibGVkLmFwcGx5KG91ckJyb3dzZXIsIFt7CisgICAgICAgICAgICAgICAgICAg IF90eXBlOiAnZGF0YWJhc2UnLAorICAgICAgICAgICAgICAgICAgICBhbGxvd0Nvbm46IGZhbHNl CisgICAgICAgICAgICAgICAgICB9LCBbe2lkOiAnbGV2ZWwxLjIuMid9XV0pKS50b0JlKGZhbHNl KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9 KTsKKyAgICAgICAgICAgIGNvbnRleHQoJ2N1cnJlbnQgbm9kZSBpcyBub3Qgb2YgdGhlIHR5cGUg ZGF0YWJhc2UnLCAoKSA9PiB7CisgICAgICAgICAgICAgIGl0KCdyZXR1cm5zIHRydWUnLCAoKSA9 PiB7CisgICAgICAgICAgICAgICAgZXhwZWN0KG1lbnVFbmFibGVkLmFwcGx5KG91ckJyb3dzZXIs IFt7CisgICAgICAgICAgICAgICAgICBfdHlwZTogJ3NjaGVtYScKKyAgICAgICAgICAgICAgICB9 LCBbe2lkOiAnbGV2ZWwxLjIuMyd9XV0pKS50b0JlKHRydWUpOworICAgICAgICAgICAgICB9KTsK KyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgICAgY29u dGV4dCgndGhlIGN1cnJlbnQgbm9kZSB0eXBlIGlzIG5vdCBpbiB0aGUgc3VwcG9ydGVkIG5vZGUg dHlwZXMnLCAoKSA9PiB7CisgICAgICAgICAgaXQoJ3JldHVybnMgZmFsc2UnLCAoKSA9PiB7Cisg ICAgICAgICAgICBleHBlY3QobWVudUVuYWJsZWQuYXBwbHkob3VyQnJvd3NlciwgW3tfdHlwZTog J2NhdGFsb2cnfSwgW3tpZDogJ2xldmVsMS4xJ31dXSkpLnRvQmUoZmFsc2UpOworICAgICAgICAg IH0pOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgY29udGV4dCgncHJv dmlkZWQgbm9kZSBkYXRhIGlzIHVuZGVmaW5lZCcsICgpID0+IHsKKyAgICAgIGl0KCdyZXR1cm5z IGZhbHNlJywgKCkgPT4geworICAgICAgICBleHBlY3QobWVudUVuYWJsZWQuYXBwbHkob3VyQnJv d3NlciwgW3VuZGVmaW5lZCwgW3tpZDogJ2xldmVsMSd9XV0pKS50b0JlKGZhbHNlKTsKKyAgICAg IH0pOworICAgIH0pOworCisgICAgY29udGV4dCgncHJvdmlkZWQgbm9kZSBkYXRhIGlzIG51bGwn LCAoKSA9PiB7CisgICAgICBpdCgncmV0dXJucyBmYWxzZScsICgpID0+IHsKKyAgICAgICAgZXhw ZWN0KG1lbnVFbmFibGVkLmFwcGx5KG91ckJyb3dzZXIsIFtudWxsLCBbe2lkOiAnbGV2ZWwxJ31d XSkpLnRvQmUoZmFsc2UpOworICAgICAgfSk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJl KCcjbWVudUVuYWJsZWRTZXJ2ZXInLCAoKSA9PiB7CisgICAgbGV0IG91ckJyb3dzZXI7CisgICAg YmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICBjb25zdCB0cmVlID0gbmV3IFRyZWVGYWtlKCk7Cisg ICAgICBvdXJCcm93c2VyID0geworICAgICAgICB0cmVlTWVudTogdHJlZSwKKyAgICAgIH07Cisg ICAgfSk7CisKKyAgICBjb250ZXh0KCdwcm92aWRlZCBub2RlIGRhdGEgaXMgdW5kZWZpbmVkJywg KCkgPT4geworICAgICAgaXQoJ3JldHVybnMgZmFsc2UnLCAoKSA9PiB7CisgICAgICAgIGV4cGVj dChtZW51RW5hYmxlZFNlcnZlcih1bmRlZmluZWQpKS50b0JlKGZhbHNlKTsKKyAgICAgIH0pOwor ICAgIH0pOworCisgICAgY29udGV4dCgncHJvdmlkZWQgbm9kZSBkYXRhIGlzIG51bGwnLCAoKSA9 PiB7CisgICAgICBpdCgncmV0dXJucyBmYWxzZScsICgpID0+IHsKKyAgICAgICAgZXhwZWN0KG1l bnVFbmFibGVkU2VydmVyKG51bGwpKS50b0JlKGZhbHNlKTsKKyAgICAgIH0pOworICAgIH0pOwor CisgICAgY29udGV4dCgnY3VycmVudCBub2RlIHR5cGUgaXMgbm90IG9mIHRoZSB0eXBlIHNlcnZl cicsICgpID0+IHsKKyAgICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAgICAgICBl eHBlY3QobWVudUVuYWJsZWRTZXJ2ZXIoe190eXBlOiAnc2NoZW1hJ30pKS50b0JlKGZhbHNlKTsK KyAgICAgIH0pOworICAgIH0pOworCisgICAgY29udGV4dCgnY3VycmVudCBub2RlIHR5cGUgaXMg b2YgdGhlIHR5cGUgc2VydmVyJywgKCkgPT4geworICAgICAgY29udGV4dCgnaXMgY29ubmVjdGVk JywgKCkgPT4geworICAgICAgICBpdCgncmV0dXJucyB0cnVlJywgKCkgPT4geworICAgICAgICAg IGV4cGVjdChtZW51RW5hYmxlZFNlcnZlcih7X3R5cGU6ICdzZXJ2ZXInLCBjb25uZWN0ZWQ6IHRy dWV9KSkudG9CZSh0cnVlKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICAgIGNvbnRleHQo J2lzIG5vdCBjb25uZWN0ZWQnLCAoKSA9PiB7CisgICAgICAgIGl0KCdyZXR1cm5zIGZhbHNlJywg KCkgPT4geworICAgICAgICAgIGV4cGVjdChtZW51RW5hYmxlZFNlcnZlcih7X3R5cGU6ICdzZXJ2 ZXInLCBjb25uZWN0ZWQ6IGZhbHNlfSkpLnRvQmUoZmFsc2UpOworICAgICAgICB9KTsKKyAgICAg IH0pOworICAgIH0pOworICB9KTsKK30pOworCmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9q YXZhc2NyaXB0L2RhdGFncmlkL2dldF9wYW5lbF90aXRsZV9zcGVjLmpzIGIvd2ViL3JlZ3Jlc3Np b24vamF2YXNjcmlwdC9kYXRhZ3JpZC9nZXRfcGFuZWxfdGl0bGVfc3BlYy5qcwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uM2JhZWRhYTEKLS0tIC9kZXYvbnVsbAorKysgYi93 ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2RhdGFncmlkL2dldF9wYW5lbF90aXRsZV9zcGVjLmpz CkBAIC0wLDAgKzEsNzkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRv b2xzCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwgVGhlIHBnQWRtaW4gRGV2ZWxv cG1lbnQgVGVhbQorLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdy ZVNRTCBMaWNlbmNlCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworaW1wb3J0IHtnZXRQYW5lbFRpdGxlfSBmcm9tICIu Li8uLi8uLi9wZ2FkbWluL3N0YXRpYy9qcy9kYXRhZ3JpZC9nZXRfcGFuZWxfdGl0bGUiOworaW1w b3J0IHtUcmVlRmFrZX0gZnJvbSAiLi4vdHJlZS90cmVlX2Zha2UiOworCitjb25zdCBjb250ZXh0 ID0gZGVzY3JpYmU7Citjb25zdCB4Y29udGV4dCA9IHhkZXNjcmliZTsKKworZGVzY3JpYmUoJyNn ZXRQYW5lbFRpdGxlJywgKCkgPT4geworICBsZXQgcGdCcm93c2VyOworICBsZXQgdHJlZTsKKyAg YmVmb3JlRWFjaCgoKSA9PiB7CisgICAgdHJlZSA9IG5ldyBUcmVlRmFrZSgpOworICAgIHBnQnJv d3NlciA9IHsKKyAgICAgIHRyZWVNZW51OiB0cmVlLAorICAgICAgTm9kZXM6IHsKKyAgICAgICAg c2VydmVyOiB7CisgICAgICAgICAgaGFzSWQ6IHRydWUsCisgICAgICAgICAgX3R5cGU6ICdzZXJ2 ZXInLAorICAgICAgICB9LAorICAgICAgICBkYXRhYmFzZTogeworICAgICAgICAgIGhhc0lkOiB0 cnVlLAorICAgICAgICAgIF90eXBlOiAnZGF0YWJhc2UnLAorICAgICAgICB9LAorICAgICAgfQor ICAgIH07CisgIH0pOworCisgIGNvbnRleHQoJ3NlbGVjdGVkIG5vZGUgZG9lcyBub3QgYmVsb25n IHRvIGEgc2VydmVyJywgKCkgPT4geworICAgIGl0KCdyZXR1cm5zIHVuZGVmaW5lZCcsICgpID0+ IHsKKyAgICAgIHRyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwxJywge190eXBlOiAnc2VydmVyX2dyb3Vw cyd9LCBbXSk7CisgICAgICB0cmVlLmFkZE5ld05vZGUoJ2xldmVsMS4xJywge190eXBlOiAnb3Ro ZXInfSwgWydsZXZlbDEnXSk7CisgICAgICB0cmVlLnNldFNlbGVjdGVkTm9kZShbe2lkOiAnbGV2 ZWwxJ31dKTsKKyAgICAgIGV4cGVjdChnZXRQYW5lbFRpdGxlKHBnQnJvd3NlcikpLnRvQmVVbmRl ZmluZWQoKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgY29udGV4dCgnc2VsZWN0ZWQgbm9kZSBiZWxv bmcgdG8gYSBzZXJ2ZXInLCAoKSA9PiB7CisgICAgY29udGV4dCgnc2VsZWN0ZWQgbm9kZSBkb2Vz IG5vdCBiZWxvbmcgdG8gYSBkYXRhYmFzZScsICgpID0+IHsKKyAgICAgIGl0KCdyZXR1cm5zIHRo ZSBzZXJ2ZXIgbGFiZWwgYW5kIHRoZSB1c2VybmFtZScsICgpID0+IHsKKyAgICAgICAgdHJlZS5h ZGROZXdOb2RlKCdsZXZlbDEnLCB7CisgICAgICAgICAgX3R5cGU6ICdzZXJ2ZXInLAorICAgICAg ICAgIGRiOiAnb3RoZXIgZGIgbGFiZWwnLAorICAgICAgICAgIHVzZXI6IHtuYW1lOiAnc29tZSB1 c2VyIG5hbWUnfSwKKyAgICAgICAgICBsYWJlbDogJ3NlcnZlciBsYWJlbCcKKyAgICAgICAgfSwg W10pOworICAgICAgICB0cmVlLnNldFNlbGVjdGVkTm9kZShbe2lkOiAnbGV2ZWwxJ31dKTsKKyAg ICAgICAgZXhwZWN0KGdldFBhbmVsVGl0bGUocGdCcm93c2VyKSkKKyAgICAgICAgICAudG9CZSgn b3RoZXIgZGIgbGFiZWwgb24gc29tZSB1c2VyIG5hbWVAc2VydmVyIGxhYmVsJyk7CisgICAgICB9 KTsKKyAgICB9KTsKKworICAgIGNvbnRleHQoJ3NlbGVjdGVkIG5vZGUgYmVsb25ncyB0byBhIGRh dGFiYXNlJywgKCkgPT4geworICAgICAgaXQoJ3JldHVybnMgdGhlIGRhdGFiYXNlIGxhYmVsIGFu ZCB0aGUgdXNlcm5hbWUnLCAoKSA9PiB7CisgICAgICAgIHRyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwx JywgeworICAgICAgICAgIF90eXBlOiAnc2VydmVyJywKKyAgICAgICAgICBkYjogJ290aGVyIGRi IGxhYmVsJywKKyAgICAgICAgICB1c2VyOiB7bmFtZTogJ3NvbWUgdXNlciBuYW1lJ30sCisgICAg ICAgICAgbGFiZWw6ICdzZXJ2ZXIgbGFiZWwnCisgICAgICAgIH0sIFtdKTsKKyAgICAgICAgdHJl ZS5hZGROZXdOb2RlKCdsZXZlbDEuMScsIHsKKyAgICAgICAgICBfdHlwZTogJ2RhdGFiYXNlJywK KyAgICAgICAgICBsYWJlbDogJ2RiIGxhYmVsJworICAgICAgICB9LCBbJ2xldmVsMSddKTsKKyAg ICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDEuMS4xJywge190eXBlOiAndGFibGUnfSwgWyds ZXZlbDEnLCAnbGV2ZWwxLjEnXSk7CisgICAgICAgIHRyZWUuc2V0U2VsZWN0ZWROb2RlKFt7aWQ6 ICdsZXZlbDEuMS4xJ31dKTsKKyAgICAgICAgZXhwZWN0KGdldFBhbmVsVGl0bGUocGdCcm93c2Vy KSkKKyAgICAgICAgICAudG9CZSgnZGIgbGFiZWwgb24gc29tZSB1c2VyIG5hbWVAc2VydmVyIGxh YmVsJyk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKZGlmZiAtLWdpdCBhL3dlYi9y ZWdyZXNzaW9uL2phdmFzY3JpcHQvZGF0YWdyaWQvc2hvd19kYXRhX3NwZWMuanMgYi93ZWIvcmVn cmVzc2lvbi9qYXZhc2NyaXB0L2RhdGFncmlkL3Nob3dfZGF0YV9zcGVjLmpzCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5lMGVmODc4MwotLS0gL2Rldi9udWxsCisrKyBiL3dl Yi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvZGF0YWdyaWQvc2hvd19kYXRhX3NwZWMuanMKQEAgLTAs MCArMSwxNTkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisv LworLy8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQg VGVhbQorLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBM aWNlbmNlCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8KKworaW1wb3J0IHtzaG93RGF0YUdyaWR9IGZyb20gIi4uLy4uLy4u L3BnYWRtaW4vc3RhdGljL2pzL2RhdGFncmlkL3Nob3dfZGF0YSI7CitpbXBvcnQge1RyZWVGYWtl fSBmcm9tICIuLi90cmVlL3RyZWVfZmFrZSI7CisKK2NvbnN0IGNvbnRleHQgPSBkZXNjcmliZTsK KworZGVzY3JpYmUoJyNzaG93X2RhdGEnLCAoKSA9PiB7CisgIGxldCBkYXRhZ3JpZDsKKyAgbGV0 IHBnQnJvd3NlcjsKKyAgbGV0IGFsZXJ0aWZ5OworICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICBh bGVydGlmeSA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCdhbGVydGlmeScsIFsnYWxlcnQnXSk7Cisg ICAgZGF0YWdyaWQgPSB7CisgICAgICBjcmVhdGVfdHJhbnNhY3Rpb246IGphc21pbmUuY3JlYXRl U3B5KCdjcmVhdGVfdHJhbnNhY3Rpb24nKSwKKyAgICB9OworICAgIHBnQnJvd3NlciA9IHsKKyAg ICAgIHRyZWVNZW51OiBuZXcgVHJlZUZha2UoKSwKKyAgICAgIE5vZGVzOiB7CisgICAgICAgIHNl cnZlcl9ncm91cDogeworICAgICAgICAgIF90eXBlOiAnc2VydmVyX2dyb3VwJywKKyAgICAgICAg ICBoYXNJZDogdHJ1ZSwKKyAgICAgICAgfSwKKyAgICAgICAgc2VydmVyOiB7CisgICAgICAgICAg X3R5cGU6ICdzZXJ2ZXInLAorICAgICAgICAgIGhhc0lkOiB0cnVlLAorICAgICAgICB9LAorICAg ICAgICBkYXRhYmFzZTogeworICAgICAgICAgIF90eXBlOiAnZGF0YWJhc2UnLAorICAgICAgICAg IGhhc0lkOiB0cnVlLAorICAgICAgICB9LAorICAgICAgICBzY2hlbWE6IHsKKyAgICAgICAgICBf dHlwZTogJ3NjaGVtYScsCisgICAgICAgICAgaGFzSWQ6IHRydWUsCisgICAgICAgIH0sCisgICAg ICAgIHZpZXc6IHsKKyAgICAgICAgICBfdHlwZTogJ3ZpZXcnLAorICAgICAgICAgIGhhc0lkOiB0 cnVlLAorICAgICAgICB9LAorICAgICAgICBjYXRhbG9nOiB7CisgICAgICAgICAgX3R5cGU6ICdj YXRhbG9nJywKKyAgICAgICAgICBoYXNJZDogdHJ1ZSwKKyAgICAgICAgfSwKKyAgICAgIH0KKyAg ICB9OworICAgIHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdwYXJlbnQnLCB7X3R5cGU6 ICdwYXJlbnQnfSwgW10pOworICAgIHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdzZXJ2 ZXJfZ3JvdXAxJywgeworICAgICAgX3R5cGU6ICdzZXJ2ZXJfZ3JvdXAnLAorICAgICAgX2lkOiAx LAorICAgIH0sIFsncGFyZW50J10pOworICAgIHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2Rl KCdzZXJ2ZXIxJywgeworICAgICAgX3R5cGU6ICdzZXJ2ZXInLAorICAgICAgbGFiZWw6ICdzZXJ2 ZXIxJywKKyAgICAgIHNlcnZlcl90eXBlOiAncGcnLAorICAgICAgX2lkOiAyLAorICAgIH0sIFsn cGFyZW50JywgJ3NlcnZlcl9ncm91cDEnXSk7CisgICAgcGdCcm93c2VyLnRyZWVNZW51LmFkZE5l d05vZGUoJ2RhdGFiYXNlMScsIHsKKyAgICAgIF90eXBlOiAnZGF0YWJhc2UnLAorICAgICAgbGFi ZWw6ICdkYXRhYmFzZTEnLAorICAgICAgX2lkOiAzLAorICAgIH0sIFsncGFyZW50JywgJ3NlcnZl cl9ncm91cDEnLCAnc2VydmVyMSddKTsKKyAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuYWRkTmV3Tm9k ZSgnc2NoZW1hMScsIHsKKyAgICAgIF90eXBlOiAnc2NoZW1hJywKKyAgICAgIGxhYmVsOiAnc2No ZW1hMScsCisgICAgICBfaWQ6IDQsCisgICAgfSwgWydwYXJlbnQnLCAnc2VydmVyX2dyb3VwMScs ICdzZXJ2ZXIxJywgJ2RhdGFiYXNlMSddKTsKKyAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuYWRkTmV3 Tm9kZSgndmlldzEnLCB7CisgICAgICBfdHlwZTogJ3ZpZXcnLAorICAgICAgbGFiZWw6ICd2aWV3 MScsCisgICAgICBfaWQ6IDUsCisgICAgfSwgWydwYXJlbnQnLCAnc2VydmVyX2dyb3VwMScsICdz ZXJ2ZXIxJywgJ2RhdGFiYXNlMSddKTsKKyAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuYWRkTmV3Tm9k ZSgnY2F0YWxvZzEnLCB7CisgICAgICBfdHlwZTogJ2NhdGFsb2cnLAorICAgICAgbGFiZWw6ICdj YXRhbG9nMScsCisgICAgICBfaWQ6IDYsCisgICAgfSwgWydwYXJlbnQnLCAnc2VydmVyX2dyb3Vw MScsICdzZXJ2ZXIxJywgJ2RhdGFiYXNlMSddKTsKKyAgfSk7CisKKyAgY29udGV4dCgnY2Fubm90 IGZpbmQgdGhlIHRyZWUgbm9kZScsICgpID0+IHsKKyAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEg dHJhbnNhY3Rpb24nLCAoKSA9PiB7CisgICAgICBzaG93RGF0YUdyaWQoZGF0YWdyaWQsIHBnQnJv d3NlciwgYWxlcnRpZnksIHt9LCBbe2lkOiAnMTAnfV0pOworICAgICAgZXhwZWN0KGRhdGFncmlk LmNyZWF0ZV90cmFuc2FjdGlvbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICB9KTsKKwor ICAgIGl0KCdkaXNwbGF5IGFsZXJ0JywgKCkgPT4geworICAgICAgc2hvd0RhdGFHcmlkKGRhdGFn cmlkLCBwZ0Jyb3dzZXIsIGFsZXJ0aWZ5LCB7fSwgW3tpZDogJzEwJ31dKTsKKyAgICAgIGV4cGVj dChhbGVydGlmeS5hbGVydCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAgICdEYXRhIEdy aWQgRXJyb3InLAorICAgICAgICAnTm8gb2JqZWN0IHNlbGVjdGVkLicKKyAgICAgICk7CisgICAg fSk7CisgIH0pOworCisgIGNvbnRleHQoJ2N1cnJlbnQgbm9kZSBpcyBub3QgdW5kZXJuZWF0aCBh IHNlcnZlcicsICgpID0+IHsKKyAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEgdHJhbnNhY3Rpb24n LCAoKSA9PiB7CisgICAgICBzaG93RGF0YUdyaWQoZGF0YWdyaWQsIHBnQnJvd3NlciwgYWxlcnRp ZnksIHt9LCBbe2lkOiAncGFyZW50J31dKTsKKyAgICAgIGV4cGVjdChkYXRhZ3JpZC5jcmVhdGVf dHJhbnNhY3Rpb24pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7CisgICAgfSk7CisgIH0pOworCisg IGNvbnRleHQoJ2N1cnJlbnQgbm9kZSBpcyBub3QgdW5kZXJuZWF0aCBhIHNjaGVtYSBvciB2aWV3 IG9yIGNhdGFsb2cnLCAoKSA9PiB7CisgICAgaXQoJ2RvZXMgbm90IGNyZWF0ZSBhIHRyYW5zYWN0 aW9uJywgKCkgPT4geworICAgICAgc2hvd0RhdGFHcmlkKGRhdGFncmlkLCBwZ0Jyb3dzZXIsIGFs ZXJ0aWZ5LCB7fSwgW3tpZDogJ2RhdGFiYXNlMSd9XSk7CisgICAgICBleHBlY3QoZGF0YWdyaWQu Y3JlYXRlX3RyYW5zYWN0aW9uKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpOworICAgIH0pOworICB9 KTsKKworICBjb250ZXh0KCdjdXJyZW50IG5vZGUgaXMgdW5kZXJuZWF0aCBhIHNjaGVtYScsICgp ID0+IHsKKyAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEgdHJhbnNhY3Rpb24nLCAoKSA9PiB7Cisg ICAgICBzaG93RGF0YUdyaWQoZGF0YWdyaWQsIHBnQnJvd3NlciwgYWxlcnRpZnksIHttbnVpZDog MTF9LCBbe2lkOiAnc2NoZW1hMSd9XSk7CisgICAgICBleHBlY3QoZGF0YWdyaWQuY3JlYXRlX3Ry YW5zYWN0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgJy9pbml0aWFsaXplL2Rh dGFncmlkLzExL3NjaGVtYS8xLzIvMy80JywKKyAgICAgICAgbnVsbCwKKyAgICAgICAgJ2ZhbHNl JywKKyAgICAgICAgJ3BnJywKKyAgICAgICAgJycsCisgICAgICAgICdzZXJ2ZXIxIC0gZGF0YWJh c2UxIC0gc2NoZW1hMS5zY2hlbWExJywKKyAgICAgICAgJycKKyAgICAgICk7CisgICAgfSk7Cisg IH0pOworCisgIGNvbnRleHQoJ2N1cnJlbnQgbm9kZSBpcyB1bmRlcm5lYXRoIGEgdmlldycsICgp ID0+IHsKKyAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEgdHJhbnNhY3Rpb24nLCAoKSA9PiB7Cisg ICAgICBzaG93RGF0YUdyaWQoZGF0YWdyaWQsIHBnQnJvd3NlciwgYWxlcnRpZnksIHttbnVpZDog MTF9LCBbe2lkOiAndmlldzEnfV0pOworICAgICAgZXhwZWN0KGRhdGFncmlkLmNyZWF0ZV90cmFu c2FjdGlvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAgICcvaW5pdGlhbGl6ZS9kYXRh Z3JpZC8xMS92aWV3LzEvMi8zLzUnLAorICAgICAgICBudWxsLAorICAgICAgICAnZmFsc2UnLAor ICAgICAgICAncGcnLAorICAgICAgICAnJywKKyAgICAgICAgJ3NlcnZlcjEgLSBkYXRhYmFzZTEg LSB2aWV3MS52aWV3MScsCisgICAgICAgICcnCisgICAgICApOworICAgIH0pOworICB9KTsKKwor ICBjb250ZXh0KCdjdXJyZW50IG5vZGUgaXMgdW5kZXJuZWF0aCBhIGNhdGFsb2cnLCAoKSA9PiB7 CisgICAgaXQoJ2RvZXMgbm90IGNyZWF0ZSBhIHRyYW5zYWN0aW9uJywgKCkgPT4geworICAgICAg c2hvd0RhdGFHcmlkKGRhdGFncmlkLCBwZ0Jyb3dzZXIsIGFsZXJ0aWZ5LCB7bW51aWQ6IDExfSwg W3tpZDogJ2NhdGFsb2cxJ31dKTsKKyAgICAgIGV4cGVjdChkYXRhZ3JpZC5jcmVhdGVfdHJhbnNh Y3Rpb24pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAnL2luaXRpYWxpemUvZGF0YWdy aWQvMTEvY2F0YWxvZy8xLzIvMy82JywKKyAgICAgICAgbnVsbCwKKyAgICAgICAgJ2ZhbHNlJywK KyAgICAgICAgJ3BnJywKKyAgICAgICAgJycsCisgICAgICAgICdzZXJ2ZXIxIC0gZGF0YWJhc2Ux IC0gY2F0YWxvZzEuY2F0YWxvZzEnLAorICAgICAgICAnJworICAgICAgKTsKKyAgICB9KTsKKyAg fSk7Cit9KTsKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvZGF0YWdyaWQv c2hvd19xdWVyeV90b29sX3NwZWMuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2RhdGFn cmlkL3Nob3dfcXVlcnlfdG9vbF9zcGVjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwLi5iMzZkYzRhNwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFz Y3JpcHQvZGF0YWdyaWQvc2hvd19xdWVyeV90b29sX3NwZWMuanMKQEAgLTAsMCArMSwxMTkgQEAK Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8KKy8vCisvLyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisvLworLy8gQ29weXJp Z2h0IChDKSAyMDEzIC0gMjAxOCwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorLy8gVGhp cyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisvLwor Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8KKworaW1wb3J0IHtUcmVlRmFrZX0gZnJvbSAnLi4vdHJlZS90cmVlX2Zha2UnOworaW1w b3J0IHtzaG93UXVlcnlUb29sfSBmcm9tICcuLi8uLi8uLi9wZ2FkbWluL3N0YXRpYy9qcy9kYXRh Z3JpZC9zaG93X3F1ZXJ5X3Rvb2wnOworCitjb25zdCBjb250ZXh0ID0gZGVzY3JpYmU7CisKK2Rl c2NyaWJlKCcjc2hvd1F1ZXJ5VG9vbCcsICgpID0+IHsKKyAgbGV0IHF1ZXJ5VG9vbDsKKyAgbGV0 IHBnQnJvd3NlcjsKKyAgbGV0IGFsZXJ0aWZ5OworICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICBh bGVydGlmeSA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCdhbGVydGlmeScsIFsnYWxlcnQnXSk7Cisg ICAgcXVlcnlUb29sID0geworICAgICAgY3JlYXRlX3RyYW5zYWN0aW9uOiBqYXNtaW5lLmNyZWF0 ZVNweSgnY3JlYXRlX3RyYW5zYWN0aW9uJyksCisgICAgfTsKKyAgICBwZ0Jyb3dzZXIgPSB7Cisg ICAgICB0cmVlTWVudTogbmV3IFRyZWVGYWtlKCksCisgICAgICBOb2RlczogeworICAgICAgICBz ZXJ2ZXJfZ3JvdXA6IHsKKyAgICAgICAgICBfdHlwZTogJ3NlcnZlcl9ncm91cCcsCisgICAgICAg ICAgaGFzSWQ6IHRydWUsCisgICAgICAgIH0sCisgICAgICAgIHNlcnZlcjogeworICAgICAgICAg IF90eXBlOiAnc2VydmVyJywKKyAgICAgICAgICBoYXNJZDogdHJ1ZSwKKyAgICAgICAgfSwKKyAg ICAgICAgZGF0YWJhc2U6IHsKKyAgICAgICAgICBfdHlwZTogJ2RhdGFiYXNlJywKKyAgICAgICAg ICBoYXNJZDogdHJ1ZSwKKyAgICAgICAgfSwKKyAgICAgIH0KKyAgICB9OworICAgIHBnQnJvd3Nl ci50cmVlTWVudS5hZGROZXdOb2RlKCdwYXJlbnQnLCB7X3R5cGU6ICdwYXJlbnQnfSwgW10pOwor ICAgIHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdzZXJ2ZXJfZ3JvdXAxJywgeworICAg ICAgX3R5cGU6ICdzZXJ2ZXJfZ3JvdXAnLAorICAgICAgX2lkOiAxLAorICAgIH0sIFsncGFyZW50 J10pOworICAgIHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdzZXJ2ZXIxJywgeworICAg ICAgX3R5cGU6ICdzZXJ2ZXInLAorICAgICAgbGFiZWw6ICdzZXJ2ZXIxJywKKyAgICAgIHNlcnZl cl90eXBlOiAncGcnLAorICAgICAgX2lkOiAyLAorICAgIH0sIFsncGFyZW50JywgJ3NlcnZlcl9n cm91cDEnXSk7CisgICAgcGdCcm93c2VyLnRyZWVNZW51LmFkZE5ld05vZGUoJ2RhdGFiYXNlMScs IHsKKyAgICAgIF90eXBlOiAnZGF0YWJhc2UnLAorICAgICAgbGFiZWw6ICdkYXRhYmFzZTEnLAor ICAgICAgX2lkOiAzLAorICAgIH0sIFsncGFyZW50JywgJ3NlcnZlcl9ncm91cDEnLCAnc2VydmVy MSddKTsKKyAgfSk7CisKKyAgY29udGV4dCgnY2Fubm90IGZpbmQgdGhlIHRyZWUgbm9kZScsICgp ID0+IHsKKyAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgIHNob3dRdWVyeVRvb2wocXVlcnlU b29sLCBwZ0Jyb3dzZXIsIGFsZXJ0aWZ5LCAnJywgW3tpZDogJzEwJ31dLCAndGl0bGUnKTsKKyAg ICB9KTsKKyAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEgdHJhbnNhY3Rpb24nLCAoKSA9PiB7Cisg ICAgICBleHBlY3QocXVlcnlUb29sLmNyZWF0ZV90cmFuc2FjdGlvbikubm90LnRvSGF2ZUJlZW5D YWxsZWQoKTsKKyAgICB9KTsKKworICAgIGl0KCdkaXNwbGF5IGFsZXJ0JywgKCkgPT4geworICAg ICAgZXhwZWN0KGFsZXJ0aWZ5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAg J1F1ZXJ5IFRvb2wgRXJyb3InLAorICAgICAgICAnTm8gb2JqZWN0IHNlbGVjdGVkLicKKyAgICAg ICk7CisgICAgfSk7CisgIH0pOworCisgIGNvbnRleHQoJ2N1cnJlbnQgbm9kZSBpcyBub3QgdW5k ZXJuZWF0aCBhIHNlcnZlcicsICgpID0+IHsKKyAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEgdHJh bnNhY3Rpb24nLCAoKSA9PiB7CisgICAgICBzaG93UXVlcnlUb29sKHF1ZXJ5VG9vbCwgcGdCcm93 c2VyLCBhbGVydGlmeSwgJycsIFt7aWQ6ICdwYXJlbnQnfV0sICd0aXRsZScpOworICAgICAgZXhw ZWN0KHF1ZXJ5VG9vbC5jcmVhdGVfdHJhbnNhY3Rpb24pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7 CisgICAgfSk7CisKKyAgICBpdCgnbm8gYWxlcnQgaXMgZGlzcGxheWVkJywgKCkgPT4geworICAg ICAgZXhwZWN0KGFsZXJ0aWZ5LmFsZXJ0KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpOworICAgIH0p OworICB9KTsKKworICBjb250ZXh0KCdjdXJyZW50IG5vZGUgaXMgdW5kZXJuZWF0aCBhIHNlcnZl cicsICgpID0+IHsKKyAgICBjb250ZXh0KCdjdXJyZW50IG5vZGUgaXMgbm90IHVuZGVybmVhdGgg YSBkYXRhYmFzZScsICgpID0+IHsKKyAgICAgIGl0KCdjcmVhdGVzIGEgdHJhbnNhY3Rpb24nLCAo KSA9PiB7CisgICAgICAgIHNob3dRdWVyeVRvb2wocXVlcnlUb29sLCBwZ0Jyb3dzZXIsIGFsZXJ0 aWZ5LCAnaHR0cDovL3NvbWV1cmwnLCBbe2lkOiAnc2VydmVyMSd9XSwgJ3RpdGxlJyk7CisgICAg ICAgIGV4cGVjdChxdWVyeVRvb2wuY3JlYXRlX3RyYW5zYWN0aW9uKS50b0hhdmVCZWVuQ2FsbGVk V2l0aCgKKyAgICAgICAgICAnL2luaXRpYWxpemUvcXVlcnlfdG9vbC8xLzInLAorICAgICAgICAg IG51bGwsCisgICAgICAgICAgJ3RydWUnLAorICAgICAgICAgICdwZycsCisgICAgICAgICAgJ2h0 dHA6Ly9zb21ldXJsJywKKyAgICAgICAgICAndGl0bGUnLAorICAgICAgICAgICcnLAorICAgICAg ICAgIGZhbHNlCisgICAgICAgICk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGNvbnRleHQo J2N1cnJlbnQgbm9kZSBpcyB1bmRlcm5lYXRoIGEgZGF0YWJhc2UnLCAoKSA9PiB7CisgICAgICBp dCgnY3JlYXRlcyBhIHRyYW5zYWN0aW9uJywgKCkgPT4geworICAgICAgICBzaG93UXVlcnlUb29s KHF1ZXJ5VG9vbCwgcGdCcm93c2VyLCBhbGVydGlmeSwgJ2h0dHA6Ly9zb21ldXJsJywgW3tpZDog J2RhdGFiYXNlMSd9XSwgJ3RpdGxlJyk7CisgICAgICAgIGV4cGVjdChxdWVyeVRvb2wuY3JlYXRl X3RyYW5zYWN0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAnL2luaXRpYWxp emUvcXVlcnlfdG9vbC8xLzIvMycsCisgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAndHJ1ZScs CisgICAgICAgICAgJ3BnJywKKyAgICAgICAgICAnaHR0cDovL3NvbWV1cmwnLAorICAgICAgICAg ICd0aXRsZScsCisgICAgICAgICAgJycsCisgICAgICAgICAgZmFsc2UKKyAgICAgICAgKTsKKyAg ICAgIH0pOworICAgIH0pOworICB9KTsKK30pOwpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24v amF2YXNjcmlwdC9mYWtlX2VuZHBvaW50cy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQv ZmFrZV9lbmRwb2ludHMuanMKaW5kZXggNjNhYjA1ZGMuLmU0YWU3MDIwIDEwMDY0NAotLS0gYS93 ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2Zha2VfZW5kcG9pbnRzLmpzCisrKyBiL3dlYi9yZWdy ZXNzaW9uL2phdmFzY3JpcHQvZmFrZV9lbmRwb2ludHMuanMKQEAgLTExLDYgKzExLDEyIEBAIGRl ZmluZShmdW5jdGlvbiAoKSB7CiAgIHJldHVybiB7CiAgICAgJ3N0YXRpYyc6ICcvYmFzZS9wZ2Fk bWluL3N0YXRpYy88cGF0aDpmaWxlbmFtZT4nLAogICAgICdzcWxlZGl0b3IucG9sbCc6ICcvc3Fs ZWRpdG9yL3F1ZXJ5X3Rvb2wvcG9sbC88cGF0aDp0cmFuc19pZD4nLAotICAgICdzcWxlZGl0b3Iu cXVlcnlfdG9vbF9zdGFydCc6ICcvc3FsZWRpdG9yL3F1ZXJ5X3Rvb2wvc3RhcnQvPHBhdGg6dHJh bnNfaWQ+JworICAgICdzcWxlZGl0b3IucXVlcnlfdG9vbF9zdGFydCc6ICcvc3FsZWRpdG9yL3F1 ZXJ5X3Rvb2wvc3RhcnQvPHBhdGg6dHJhbnNfaWQ+JywKKyAgICAnYmFja3VwLmNyZWF0ZV9zZXJ2 ZXJfam9iJzogICcvYmFja3VwL2pvYi88aW50OnNpZD4nLAorICAgICdiYWNrdXAuY3JlYXRlX29i amVjdF9qb2InOiAgJy9iYWNrdXAvam9iLzxpbnQ6c2lkPi9vYmplY3QnLAorICAgICdkYXRhZ3Jp ZC5pbml0aWFsaXplX2RhdGFncmlkJzogJy9pbml0aWFsaXplL2RhdGFncmlkLzxpbnQ6Y21kX3R5 cGU+LzxvYmpfdHlwZT4vPGludDpzZ2lkPi88aW50OnNpZD4vPGludDpkaWQ+LzxpbnQ6b2JqX2lk PicsCisgICAgJ2RhdGFncmlkLmluaXRpYWxpemVfcXVlcnlfdG9vbCc6ICcvaW5pdGlhbGl6ZS9x dWVyeV90b29sLzxpbnQ6c2dpZD4vPGludDpzaWQ+JywKKyAgICAnZGF0YWdyaWQuaW5pdGlhbGl6 ZV9xdWVyeV90b29sX3dpdGhfZGlkJzogJy9pbml0aWFsaXplL3F1ZXJ5X3Rvb2wvPGludDpzZ2lk Pi88aW50OnNpZD4vPGludDpkaWQ+JywKKwogICB9OwogfSk7CmRpZmYgLS1naXQgYS93ZWIvcmVn cmVzc2lvbi9qYXZhc2NyaXB0L2Zha2VfbW9kZWwuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2Ny aXB0L2Zha2VfbW9kZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmFj ZmFhNTMyCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9mYWtl X21vZGVsLmpzCkBAIC0wLDAgKzEsMjEgQEAKK2V4cG9ydCBjbGFzcyBGYWtlTW9kZWwgeworICBj b25zdHJ1Y3RvcigpIHsKKyAgICB0aGlzLnZhbHVlcyA9IHt9OworICB9CisKKyAgc2V0KGtleSwg dmFsdWUpIHsKKyAgICB0aGlzLnZhbHVlc1trZXldID0gdmFsdWU7CisgIH0KKworICBnZXQoa2V5 KSB7CisgICAgcmV0dXJuIHRoaXMudmFsdWVzW2tleV07CisgIH0KKworICB1bnNldChrZXkpIHsK KyAgICBkZWxldGUgdGhpcy52YWx1ZXNba2V5XTsKKyAgfQorCisgIHRvSlNPTigpIHsKKyAgICBy ZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy52YWx1ZXMpOworICB9Cit9CmRpZmYgLS1naXQg YS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3RyZWUvcGdhZG1pbl90cmVlX25vZGVfc3BlYy5q cyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvdHJlZS9wZ2FkbWluX3RyZWVfbm9kZV9zcGVj LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4xY2FiNjVmMAotLS0gL2Rl di9udWxsCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvdHJlZS9wZ2FkbWluX3RyZWVf bm9kZV9zcGVjLmpzCkBAIC0wLDAgKzEsMzUzIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8v IHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMg LSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlz IHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLworCitpbXBvcnQgeworICBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21FbGVtZW50LAorICBn ZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21JZGVudGlmaWVyCit9IGZyb20gIi4uLy4uLy4uL3BnYWRt aW4vc3RhdGljL2pzL3RyZWUvcGdhZG1pbl90cmVlX25vZGUiOworaW1wb3J0IHtUcmVlfSBmcm9t ICIuLi8uLi8uLi9wZ2FkbWluL3N0YXRpYy9qcy90cmVlL3RyZWUiOworCitjb25zdCBjb250ZXh0 ID0gZGVzY3JpYmU7CisKK2Rlc2NyaWJlKCd0cmVlI25vZGUjZ2V0VHJlZU5vZGVIaWVyYXJjaHkn LCAoKSA9PiB7CisgIGxldCBicm93c2VyOworICBsZXQgbmV3VHJlZTsKKyAgbGV0IHRyYW5zbGF0 ZVRyZWVOb2RlSWRGcm9tQUNJVHJlZVNweTsKKyAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgbmV3 VHJlZSA9IG5ldyBUcmVlKCk7CisgICAgYnJvd3NlciA9IHsKKyAgICAgIE5vZGVzOiB7CisgICAg ICAgICdzcGVjaWFsIG9uZSc6IHtoYXNJZDogdHJ1ZX0sCisgICAgICAgICdjaGlsZCBzcGVjaWFs Jzoge2hhc0lkOiB0cnVlfSwKKyAgICAgICAgJ290aGVyIHR5cGUnOiB7aGFzSWQ6IHRydWV9LAor ICAgICAgICAndGFibGUnOiB7aGFzSWQ6IHRydWV9LAorICAgICAgICAncGFydGl0aW9uJzoge2hh c0lkOiB0cnVlfSwKKyAgICAgICAgJ25vIGlkJzoge2hhc0lkOiBmYWxzZX0sCisgICAgICB9Cisg ICAgfTsKKyAgICBicm93c2VyLnRyZWVNZW51ID0gbmV3VHJlZTsKKyAgICB0cmFuc2xhdGVUcmVl Tm9kZUlkRnJvbUFDSVRyZWVTcHkgPSBzcHlPbihuZXdUcmVlLCAndHJhbnNsYXRlVHJlZU5vZGVJ ZEZyb21BQ0lUcmVlJyk7CisgIH0pOworCisgIGNvbnRleHQoJ2dldFRyZWVOb2RlSGllcmFyY2h5 IGlzIGNhbGxlZCB3aXRoIGFjaVRyZWVOb2RlIG9iamVjdCcsICgpID0+IHsKKyAgICBkZXNjcmli ZSgnV2hlbiB0aGUgY3VycmVudCBub2RlIGlzIHJvb3QgZWxlbWVudCcsICgpID0+IHsKKyAgICAg IGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICBuZXdUcmVlLmFkZE5ld05vZGUoJ3Jvb3QnLCB7 CisgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAgICAgICAgICdfdHlwZSc6 ICdzcGVjaWFsIG9uZScKKyAgICAgICAgfSwgW10pOworICAgICAgICB0cmFuc2xhdGVUcmVlTm9k ZUlkRnJvbUFDSVRyZWVTcHkuYW5kLnJldHVyblZhbHVlKFsncm9vdCddKTsKKyAgICAgIH0pOwor CisgICAgICBpdCgncmV0dXJucyBhIG9iamVjdCB3aXRoIHRoZSBlbGVtZW50IHR5cGUgcGFzc2Vk IGRhdGEgYW5kIHByaW9yaXR5ID09IDAnLCAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJlc3VsdCA9 IGdldFRyZWVOb2RlSGllcmFyY2h5RnJvbUlkZW50aWZpZXIuYmluZChicm93c2VyKSgncm9vdCcp OworICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsKKyAgICAgICAgICAnc3BlY2lhbCBv bmUnOiB7CisgICAgICAgICAgICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisgICAgICAgICAg ICAnX3R5cGUnOiAnc3BlY2lhbCBvbmUnLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogMCwKKyAg ICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICBkZXNjcmli ZSgnV2hlbiB0aGUgY3VycmVudCBub2RlIGlzIG5vdCBvZiBhIGtub3duIHR5cGUnLCAoKSA9PiB7 CisgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgbmV3VHJlZS5hZGROZXdOb2RlKCdy b290JywgeworICAgICAgICAgICdzb21lIGtleSc6ICdzb21lIHZhbHVlJywKKyAgICAgICAgICAn X3R5cGUnOiAnZG8gbm90IGV4aXN0JworICAgICAgICB9LCBbXSk7CisgICAgICAgIHRyYW5zbGF0 ZVRyZWVOb2RlSWRGcm9tQUNJVHJlZVNweS5hbmQucmV0dXJuVmFsdWUoWydyb290J10pOworICAg ICAgfSk7CisKKyAgICAgIGl0KCdyZXR1cm5zIGEgZW1wdHkgb2JqZWN0JywgKCkgPT4geworICAg ICAgICBjb25zdCByZXN1bHQgPSBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21JZGVudGlmaWVyLmJp bmQoYnJvd3NlcikoJ3Jvb3QnKTsKKyAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7fSk7 CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCdXaGVuIHRoZSBjdXJyZW50IG5v ZGUgdHlwZSBoYXMgbm8gaWQnLCAoKSA9PiB7CisgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAg ICAgICAgbmV3VHJlZS5hZGROZXdOb2RlKCdyb290JywgeworICAgICAgICAgICdzb21lIGtleSc6 ICdzb21lIHZhbHVlJywKKyAgICAgICAgICAnX3R5cGUnOiAnbm8gaWQnCisgICAgICAgIH0sIFtd KTsKKyAgICAgICAgdHJhbnNsYXRlVHJlZU5vZGVJZEZyb21BQ0lUcmVlU3B5LmFuZC5yZXR1cm5W YWx1ZShbJ3Jvb3QnXSk7CisgICAgICB9KTsKKworICAgICAgaXQoJ3JldHVybnMgYSBlbXB0eSBv YmplY3QnLCAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFRyZWVOb2RlSGllcmFy Y2h5RnJvbUlkZW50aWZpZXIuYmluZChicm93c2VyKSgncm9vdCcpOworICAgICAgICBleHBlY3Qo cmVzdWx0KS50b0VxdWFsKHt9KTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgZGVzY3JpYmUo J1doZW4gdGhlIGN1cnJlbnQgbm9kZSBpcyBhdCB0aGUgc2Vjb25kIGxldmVsJywgKCkgPT4gewor ICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgIG5ld1RyZWUuYWRkTmV3Tm9kZSgncm9v dCcsIHsKKyAgICAgICAgICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisgICAgICAgICAgJ190 eXBlJzogJ3NwZWNpYWwgb25lJworICAgICAgICB9LCBbXSk7CisgICAgICAgIG5ld1RyZWUuYWRk TmV3Tm9kZSgnZmlyc3QgY2hpbGQnLCB7CisgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgb3Ro ZXIgdmFsdWUnLAorICAgICAgICAgICdfdHlwZSc6ICdjaGlsZCBzcGVjaWFsJworICAgICAgICB9 LCBbJ3Jvb3QnXSk7CisgICAgICAgIHRyYW5zbGF0ZVRyZWVOb2RlSWRGcm9tQUNJVHJlZVNweS5h bmQucmV0dXJuVmFsdWUoWydyb290JywgJ2ZpcnN0JyArCisgICAgICAgICcgY2hpbGQnXSk7Cisg ICAgICB9KTsKKworICAgICAgaXQoJ3JldHVybnMgYSBlbXB0eSBvYmplY3QnLCAoKSA9PiB7Cisg ICAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFRyZWVOb2RlSGllcmFyY2h5RnJvbUlkZW50aWZpZXIu YmluZChicm93c2VyKSgnZmlyc3QgY2hpbGQnKTsKKyAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9F cXVhbCh7CisgICAgICAgICAgJ2NoaWxkIHNwZWNpYWwnOiB7CisgICAgICAgICAgICAnc29tZSBr ZXknOiAnc29tZSBvdGhlciB2YWx1ZScsCisgICAgICAgICAgICAnX3R5cGUnOiAnY2hpbGQgc3Bl Y2lhbCcsCisgICAgICAgICAgICAncHJpb3JpdHknOiAwLAorICAgICAgICAgIH0sCisgICAgICAg ICAgJ3NwZWNpYWwgb25lJzogeworICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUn LAorICAgICAgICAgICAgJ190eXBlJzogJ3NwZWNpYWwgb25lJywKKyAgICAgICAgICAgICdwcmlv cml0eSc6IC0xLAorICAgICAgICAgIH0sCisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7 CisKKyAgICBjb250ZXh0KCdXaGVuIHRyZWUgYXMgInNwZWNpYWwgdHlwZSInLCAoKSA9PiB7Cisg ICAgICBjb250ZXh0KCdXaGVuICJzcGVjaWFsIHR5cGUiIGhhdmUgIm90aGVyIHR5cGUiJywgKCkg PT4geworICAgICAgICBjb250ZXh0KCdXaGVuICJvdGhlciB0eXBlIiBoYXZlICJzcGVjaWFsIHR5 cGUiJywgKCkgPT4geworICAgICAgICAgIGRlc2NyaWJlKCdXaGVuIHJldHJpZXZpbmcgbGVhZCBu b2RlJywgKCkgPT4geworICAgICAgICAgICAgaXQoJ2RvZXMgbm90IG92ZXJyaWRlIHByZXZpb3Vz IG5vZGUgdHlwZSBkYXRhJywgKCkgPT4geworICAgICAgICAgICAgICBuZXdUcmVlLmFkZE5ld05v ZGUoJ3Jvb3QnLCB7CisgICAgICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAor ICAgICAgICAgICAgICAgICdfdHlwZSc6ICdzcGVjaWFsIG9uZScKKyAgICAgICAgICAgICAgfSwg W10pOworICAgICAgICAgICAgICBuZXdUcmVlLmFkZE5ld05vZGUoJ2xldmVsIDEnLCB7CisgICAg ICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAgICAgICAgICAgICAgICdf dHlwZSc6ICdvdGhlciB0eXBlJworICAgICAgICAgICAgICB9LCBbJ3Jvb3QnXSk7CisgICAgICAg ICAgICAgIG5ld1RyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwgMicsIHsKKyAgICAgICAgICAgICAgICAn c29tZSBrZXknOiAnZXhwZWN0ZWQgdmFsdWUnLAorICAgICAgICAgICAgICAgICdfdHlwZSc6ICdz cGVjaWFsIG9uZScsCisgICAgICAgICAgICAgICAgJ3NvbWUgb3RoZXIga2V5JzogJ3NvbWUgb3Ro ZXIgdmFsdWUnLAorICAgICAgICAgICAgICB9LCBbJ3Jvb3QnLCAnbGV2ZWwgMSddKTsKKworICAg ICAgICAgICAgICB0cmFuc2xhdGVUcmVlTm9kZUlkRnJvbUFDSVRyZWVTcHkuYW5kLnJldHVyblZh bHVlKFsncm9vdCcsICdsZXZlbCAxJywgJ2xldmVsIDInXSk7CisKKyAgICAgICAgICAgICAgY29u c3QgcmVzdWx0ID0gZ2V0VHJlZU5vZGVIaWVyYXJjaHlGcm9tSWRlbnRpZmllci5iaW5kKGJyb3dz ZXIpKCdsZXZlbCAyJyk7CisgICAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoewor ICAgICAgICAgICAgICAgICdzcGVjaWFsIG9uZSc6IHsKKyAgICAgICAgICAgICAgICAgICdzb21l IGtleSc6ICdleHBlY3RlZCB2YWx1ZScsCisgICAgICAgICAgICAgICAgICAnX3R5cGUnOiAnc3Bl Y2lhbCBvbmUnLAorICAgICAgICAgICAgICAgICAgJ3NvbWUgb3RoZXIga2V5JzogJ3NvbWUgb3Ro ZXIgdmFsdWUnLAorICAgICAgICAgICAgICAgICAgJ3ByaW9yaXR5JzogMCwKKyAgICAgICAgICAg ICAgICB9LAorICAgICAgICAgICAgICAgICdvdGhlciB0eXBlJzogeworICAgICAgICAgICAgICAg ICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAgICAgICAgICAgICAgICAgJ190eXBlJzog J290aGVyIHR5cGUnLAorICAgICAgICAgICAgICAgICAgJ3ByaW9yaXR5JzogLTEsCisgICAgICAg ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg ICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGNvbnRleHQoJ1do ZW4gdHJlZSBoYXMgdGFibGUnLCAoKSA9PiB7CisgICAgICBjb250ZXh0KCd3aGVuIHRhYmxlIGhh cyBwYXJ0aXRpb24nLCAoKSA9PiB7CisgICAgICAgIGl0KCdyZXR1cm5zIHRhYmxlIHdpdGggcGFy dGl0aW9uIHBhcmFtZXRlcnMnLCAoKSA9PiB7CisgICAgICAgICAgbmV3VHJlZS5hZGROZXdOb2Rl KCdyb290JywgeworICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAgICAg ICAgICAgJ190eXBlJzogJ3NwZWNpYWwgb25lJworICAgICAgICAgIH0sIFtdKTsKKyAgICAgICAg ICBuZXdUcmVlLmFkZE5ld05vZGUoJ2xldmVsIDEnLCB7CisgICAgICAgICAgICAnc29tZSBrZXkn OiAnc29tZSB2YWx1ZScsCisgICAgICAgICAgICAnX3R5cGUnOiAndGFibGUnCisgICAgICAgICAg fSwgWydyb290J10pOworICAgICAgICAgIG5ld1RyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwgMicsIHsK KyAgICAgICAgICAgICdzb21lIGtleSc6ICdleHBlY3RlZCB2YWx1ZScsCisgICAgICAgICAgICAn X3R5cGUnOiAncGFydGl0aW9uJywKKyAgICAgICAgICAgICdzb21lIG90aGVyIGtleSc6ICdzb21l IG90aGVyIHZhbHVlJywKKyAgICAgICAgICB9LCBbJ3Jvb3QnLCAnbGV2ZWwgMSddKTsKKworICAg ICAgICAgIHRyYW5zbGF0ZVRyZWVOb2RlSWRGcm9tQUNJVHJlZVNweS5hbmQucmV0dXJuVmFsdWUo Wydyb290JywgJ2xldmVsIDEnLCAnbGV2ZWwgMiddKTsKKworICAgICAgICAgIGNvbnN0IHJlc3Vs dCA9IGdldFRyZWVOb2RlSGllcmFyY2h5RnJvbUlkZW50aWZpZXIuYmluZChicm93c2VyKSgnbGV2 ZWwgMicpOworICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeworICAgICAgICAgICAg J3NwZWNpYWwgb25lJzogeworICAgICAgICAgICAgICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScs CisgICAgICAgICAgICAgICdfdHlwZSc6ICdzcGVjaWFsIG9uZScsCisgICAgICAgICAgICAgICdw cmlvcml0eSc6IC0xLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICd0YWJsZSc6IHsKKyAg ICAgICAgICAgICAgJ3NvbWUga2V5JzogJ2V4cGVjdGVkIHZhbHVlJywKKyAgICAgICAgICAgICAg J3NvbWUgb3RoZXIga2V5JzogJ3NvbWUgb3RoZXIgdmFsdWUnLAorICAgICAgICAgICAgICAnX3R5 cGUnOiAncGFydGl0aW9uJywKKyAgICAgICAgICAgICAgJ3ByaW9yaXR5JzogMCwKKyAgICAgICAg ICAgIH0sCisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7Cisg IH0pOworCisgIGNvbnRleHQoJ2dldFRyZWVOb2RlSGllcmFyY2h5IGlzIGNhbGxlZCB3aXRoIFRy ZWVOb2RlIG9iamVjdCcsICgpID0+IHsKKyAgICBsZXQgdHJlZU5vZGU7CisgICAgZGVzY3JpYmUo J1doZW4gdGhlIGN1cnJlbnQgbm9kZSBpcyByb290IGVsZW1lbnQnLCAoKSA9PiB7CisgICAgICBi ZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgdHJlZU5vZGUgPSBuZXdUcmVlLmFkZE5ld05vZGUo J3Jvb3QnLCB7CisgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAgICAgICAg ICdfdHlwZSc6ICdzcGVjaWFsIG9uZScKKyAgICAgICAgfSwgW10pOworICAgICAgfSk7CisKKyAg ICAgIGl0KCdyZXR1cm5zIGEgb2JqZWN0IHdpdGggdGhlIGVsZW1lbnQgdHlwZSBwYXNzZWQgZGF0 YSBhbmQgcHJpb3JpdHkgPT0gMCcsICgpID0+IHsKKyAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0 VHJlZU5vZGVIaWVyYXJjaHlGcm9tRWxlbWVudChicm93c2VyLCB0cmVlTm9kZSk7CisgICAgICAg IGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeworICAgICAgICAgICdzcGVjaWFsIG9uZSc6IHsKKyAg ICAgICAgICAgICdzb21lIGtleSc6ICdzb21lIHZhbHVlJywKKyAgICAgICAgICAgICdfdHlwZSc6 ICdzcGVjaWFsIG9uZScsCisgICAgICAgICAgICAncHJpb3JpdHknOiAwLAorICAgICAgICAgIH0K KyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCdXaGVuIHRo ZSBjdXJyZW50IG5vZGUgaXMgbm90IG9mIGEga25vd24gdHlwZScsICgpID0+IHsKKyAgICAgIGJl Zm9yZUVhY2goKCkgPT4geworICAgICAgICB0cmVlTm9kZSA9IG5ld1RyZWUuYWRkTmV3Tm9kZSgn cm9vdCcsIHsKKyAgICAgICAgICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisgICAgICAgICAg J190eXBlJzogJ2RvIG5vdCBleGlzdCcKKyAgICAgICAgfSwgW10pOworICAgICAgfSk7CisKKyAg ICAgIGl0KCdyZXR1cm5zIGEgZW1wdHkgb2JqZWN0JywgKCkgPT4geworICAgICAgICBjb25zdCBy ZXN1bHQgPSBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21FbGVtZW50KGJyb3dzZXIsIHRyZWVOb2Rl KTsKKyAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7fSk7CisgICAgICB9KTsKKyAgICB9 KTsKKworICAgIGRlc2NyaWJlKCdXaGVuIHRoZSBjdXJyZW50IG5vZGUgdHlwZSBoYXMgbm8gaWQn LCAoKSA9PiB7CisgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgdHJlZU5vZGUgPSBu ZXdUcmVlLmFkZE5ld05vZGUoJ3Jvb3QnLCB7CisgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUg dmFsdWUnLAorICAgICAgICAgICdfdHlwZSc6ICdubyBpZCcKKyAgICAgICAgfSwgW10pOworICAg ICAgfSk7CisKKyAgICAgIGl0KCdyZXR1cm5zIGEgZW1wdHkgb2JqZWN0JywgKCkgPT4geworICAg ICAgICBjb25zdCByZXN1bHQgPSBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21FbGVtZW50KGJyb3dz ZXIsIHRyZWVOb2RlKTsKKyAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7fSk7CisgICAg ICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCdXaGVuIHRoZSBjdXJyZW50IG5vZGUgaXMg YXQgdGhlIHNlY29uZCBsZXZlbCcsICgpID0+IHsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4gewor ICAgICAgICBuZXdUcmVlLmFkZE5ld05vZGUoJ3Jvb3QnLCB7CisgICAgICAgICAgJ3NvbWUga2V5 JzogJ3NvbWUgdmFsdWUnLAorICAgICAgICAgICdfdHlwZSc6ICdzcGVjaWFsIG9uZScKKyAgICAg ICAgfSwgW10pOworICAgICAgICB0cmVlTm9kZSA9IG5ld1RyZWUuYWRkTmV3Tm9kZSgnZmlyc3Qg Y2hpbGQnLCB7CisgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgb3RoZXIgdmFsdWUnLAorICAg ICAgICAgICdfdHlwZSc6ICdjaGlsZCBzcGVjaWFsJworICAgICAgICB9LCBbJ3Jvb3QnXSk7Cisg ICAgICB9KTsKKworICAgICAgaXQoJ3JldHVybnMgYSBlbXB0eSBvYmplY3QnLCAoKSA9PiB7Cisg ICAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFRyZWVOb2RlSGllcmFyY2h5RnJvbUVsZW1lbnQoYnJv d3NlciwgdHJlZU5vZGUpOworICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsKKyAgICAg ICAgICAnY2hpbGQgc3BlY2lhbCc6IHsKKyAgICAgICAgICAgICdzb21lIGtleSc6ICdzb21lIG90 aGVyIHZhbHVlJywKKyAgICAgICAgICAgICdfdHlwZSc6ICdjaGlsZCBzcGVjaWFsJywKKyAgICAg ICAgICAgICdwcmlvcml0eSc6IDAsCisgICAgICAgICAgfSwKKyAgICAgICAgICAnc3BlY2lhbCBv bmUnOiB7CisgICAgICAgICAgICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisgICAgICAgICAg ICAnX3R5cGUnOiAnc3BlY2lhbCBvbmUnLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogLTEsCisg ICAgICAgICAgfSwKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGNvbnRl eHQoJ1doZW4gdHJlZSBhcyAic3BlY2lhbCB0eXBlIicsICgpID0+IHsKKyAgICAgIGNvbnRleHQo J1doZW4gInNwZWNpYWwgdHlwZSIgaGF2ZSAib3RoZXIgdHlwZSInLCAoKSA9PiB7CisgICAgICAg IGNvbnRleHQoJ1doZW4gIm90aGVyIHR5cGUiIGhhdmUgInNwZWNpYWwgdHlwZSInLCAoKSA9PiB7 CisgICAgICAgICAgZGVzY3JpYmUoJ1doZW4gcmV0cmlldmluZyBsZWFkIG5vZGUnLCAoKSA9PiB7 CisgICAgICAgICAgICBpdCgnZG9lcyBub3Qgb3ZlcnJpZGUgcHJldmlvdXMgbm9kZSB0eXBlIGRh dGEnLCAoKSA9PiB7CisgICAgICAgICAgICAgIG5ld1RyZWUuYWRkTmV3Tm9kZSgncm9vdCcsIHsK KyAgICAgICAgICAgICAgICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisgICAgICAgICAgICAg ICAgJ190eXBlJzogJ3NwZWNpYWwgb25lJworICAgICAgICAgICAgICB9LCBbXSk7CisgICAgICAg ICAgICAgIG5ld1RyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwgMScsIHsKKyAgICAgICAgICAgICAgICAn c29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisgICAgICAgICAgICAgICAgJ190eXBlJzogJ290aGVy IHR5cGUnCisgICAgICAgICAgICAgIH0sIFsncm9vdCddKTsKKyAgICAgICAgICAgICAgdHJlZU5v ZGUgPSBuZXdUcmVlLmFkZE5ld05vZGUoJ2xldmVsIDInLCB7CisgICAgICAgICAgICAgICAgJ3Nv bWUga2V5JzogJ2V4cGVjdGVkIHZhbHVlJywKKyAgICAgICAgICAgICAgICAnX3R5cGUnOiAnc3Bl Y2lhbCBvbmUnLAorICAgICAgICAgICAgICAgICdzb21lIG90aGVyIGtleSc6ICdzb21lIG90aGVy IHZhbHVlJywKKyAgICAgICAgICAgICAgfSwgWydyb290JywgJ2xldmVsIDEnXSk7CisKKyAgICAg ICAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHJlZU5vZGVIaWVyYXJjaHlGcm9tRWxlbWVudChi cm93c2VyLCB0cmVlTm9kZSk7CisgICAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwo eworICAgICAgICAgICAgICAgICdzcGVjaWFsIG9uZSc6IHsKKyAgICAgICAgICAgICAgICAgICdz b21lIGtleSc6ICdleHBlY3RlZCB2YWx1ZScsCisgICAgICAgICAgICAgICAgICAnX3R5cGUnOiAn c3BlY2lhbCBvbmUnLAorICAgICAgICAgICAgICAgICAgJ3NvbWUgb3RoZXIga2V5JzogJ3NvbWUg b3RoZXIgdmFsdWUnLAorICAgICAgICAgICAgICAgICAgJ3ByaW9yaXR5JzogMCwKKyAgICAgICAg ICAgICAgICB9LAorICAgICAgICAgICAgICAgICdvdGhlciB0eXBlJzogeworICAgICAgICAgICAg ICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAgICAgICAgICAgICAgICAgJ190eXBl JzogJ290aGVyIHR5cGUnLAorICAgICAgICAgICAgICAgICAgJ3ByaW9yaXR5JzogLTEsCisgICAg ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAg ICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGNvbnRleHQo J1doZW4gdHJlZSBoYXMgdGFibGUnLCAoKSA9PiB7CisgICAgICBjb250ZXh0KCd3aGVuIHRhYmxl IGhhcyBwYXJ0aXRpb24nLCAoKSA9PiB7CisgICAgICAgIGl0KCdyZXR1cm5zIHRhYmxlIHdpdGgg cGFydGl0aW9uIHBhcmFtZXRlcnMnLCAoKSA9PiB7CisgICAgICAgICAgbmV3VHJlZS5hZGROZXdO b2RlKCdyb290JywgeworICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAg ICAgICAgICAgJ190eXBlJzogJ3NwZWNpYWwgb25lJworICAgICAgICAgIH0sIFtdKTsKKyAgICAg ICAgICBuZXdUcmVlLmFkZE5ld05vZGUoJ2xldmVsIDEnLCB7CisgICAgICAgICAgICAnc29tZSBr ZXknOiAnc29tZSB2YWx1ZScsCisgICAgICAgICAgICAnX3R5cGUnOiAndGFibGUnCisgICAgICAg ICAgfSwgWydyb290J10pOworICAgICAgICAgIHRyZWVOb2RlID0gbmV3VHJlZS5hZGROZXdOb2Rl KCdsZXZlbCAyJywgeworICAgICAgICAgICAgJ3NvbWUga2V5JzogJ2V4cGVjdGVkIHZhbHVlJywK KyAgICAgICAgICAgICdfdHlwZSc6ICdwYXJ0aXRpb24nLAorICAgICAgICAgICAgJ3NvbWUgb3Ro ZXIga2V5JzogJ3NvbWUgb3RoZXIgdmFsdWUnLAorICAgICAgICAgIH0sIFsncm9vdCcsICdsZXZl bCAxJ10pOworCisgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHJlZU5vZGVIaWVyYXJjaHlG cm9tRWxlbWVudChicm93c2VyLCB0cmVlTm9kZSk7CisgICAgICAgICAgZXhwZWN0KHJlc3VsdCku dG9FcXVhbCh7CisgICAgICAgICAgICAnc3BlY2lhbCBvbmUnOiB7CisgICAgICAgICAgICAgICdz b21lIGtleSc6ICdzb21lIHZhbHVlJywKKyAgICAgICAgICAgICAgJ190eXBlJzogJ3NwZWNpYWwg b25lJywKKyAgICAgICAgICAgICAgJ3ByaW9yaXR5JzogLTEsCisgICAgICAgICAgICB9LAorICAg ICAgICAgICAgJ3RhYmxlJzogeworICAgICAgICAgICAgICAnc29tZSBrZXknOiAnZXhwZWN0ZWQg dmFsdWUnLAorICAgICAgICAgICAgICAnc29tZSBvdGhlciBrZXknOiAnc29tZSBvdGhlciB2YWx1 ZScsCisgICAgICAgICAgICAgICdfdHlwZSc6ICdwYXJ0aXRpb24nLAorICAgICAgICAgICAgICAn cHJpb3JpdHknOiAwLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7 CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKZGlmZiAtLWdpdCBhL3dlYi95YXJuLmxv Y2sgYi93ZWIveWFybi5sb2NrCmluZGV4IDg4ZWRlYjFmLi5kYTVlNWY2NCAxMDA2NDQKLS0tIGEv d2ViL3lhcm4ubG9jaworKysgYi93ZWIveWFybi5sb2NrCkBAIC03NDIyLDcgKzc0MjIsNyBAQCBz cHJpbnRmLWpzQDEuMS4wOgogICB2ZXJzaW9uICIxLjEuMCIKICAgcmVzb2x2ZWQgImh0dHBzOi8v cmVnaXN0cnkueWFybnBrZy5jb20vc3ByaW50Zi1qcy8tL3NwcmludGYtanMtMS4xLjAudGd6I2Nm ZmNhZjcwMmRhZjY1ZWEzOWJiNGUwZmEyYjI5OWNlYzFhMWJlNDYiCgotc3ByaW50Zi1qc0BeMS4w LjM6CitzcHJpbnRmLWpzQF4xLjAuMywgc3ByaW50Zi1qc0BeMS4xLjE6CiAgIHZlcnNpb24gIjEu MS4xIgogICByZXNvbHZlZCAiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9zcHJpbnRmLWpz Ly0vc3ByaW50Zi1qcy0xLjEuMS50Z3ojMzZiZTc4MzIwYWZlNTgwMWY2Y2VhM2VlNzhiNmU1YWFi OTQwZWEwYyIKCi0tCjIuMTUuMQoK --94eb2c0b89ea42d2180568e1ff4a--